Hi,
I’m trying to write an app for referenceapplication. I was following the Step by Step tutorial [App Framework Step by Step Tutorial - Documentation - OpenMRS Wiki ] trying to replicate the work done in the frontend. i encountered a view exception as seen below
UI Framework Error
Root Error
org.openmrs.ui.framework.ViewException: *** In view 'encountersToday', could not find property 'provider'.
Passed from controller:
sessionContext -> org.openmrs.module.appui.UiSessionContext@270625f8
featureToggles -> org.openmrs.module.appframework.feature.FeatureToggleProperties@7bf66a46
encounters -> [Encounter: [2 2021-10-31 20:15:15.0 Visit Note Laboratory 7 Visit Note num Obs: [Obs #2] num Orders: 0 ], Encounter: [3 2021-10-31 20:24:36.0 Visit Note Laboratory 10 Visit Note num Obs: [Obs #3] num Orders: 0 ], Encounter: [4 2021-10-31 20:27:42.0 Visit Note Laboratory 9 Visit Note num Obs: [Obs #4] num Orders: 0 ]]
patient -> null
ui -> org.openmrs.ui.framework.fragment.FragmentUiUtils@14d033be
context -> org.openmrs.api.context.Context@6871997
contextPath -> openmrs
session -> org.openmrs.ui.framework.session.Session@3d1f547b
param -> org.apache.catalina.util.ParameterMap@2db02aab
out -> java.io.PrintWriter@38e8a160
config -> {start=2021-10-31, end=2021-10-31 23:59:59.999, id=fr2550}
at org.openmrs.ui.framework.fragment.GroovyFragmentView.render(GroovyFragmentView.java:55)
at org.openmrs.ui.framework.fragment.FragmentFactory.processThisFragment(FragmentFactory.java:195)
at org.openmrs.ui.framework.fragment.FragmentFactory.process(FragmentFactory.java:124)
at org.openmrs.ui.framework.page.PageContext.includeFragment(PageContext.java:76)
at org.openmrs.ui.framework.UiUtils.includeFragment(UiUtils.java:162)
at org.openmrs.ui.framework.UiUtils$includeFragment$13.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
at SimpleTemplateScript16.run(SimpleTemplateScript16.groovy:3)
at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.writeTo(SimpleTemplateEngine.java:168)
at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.toString(SimpleTemplateEngine.java:180)
at org.openmrs.ui.framework.page.GroovyPageView.render(GroovyPageView.java:43)
at org.openmrs.ui.framework.page.PageFactory.processThisFragment(PageFactory.java:187)
at org.openmrs.ui.framework.page.PageFactory.process(PageFactory.java:116)
at org.openmrs.ui.framework.page.PageFactory.handle(PageFactory.java:86)
at org.openmrs.module.uiframework.PageController.handlePath(PageController.java:117)
at org.openmrs.module.uiframework.PageController.handleUrlWithDotPage(PageController.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:177)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.GZIPFilter.doFilterInternal(GZIPFilter.java:65)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.module.web.filter.ForcePasswordChangeFilter.doFilter(ForcePasswordChangeFilter.java:60)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:73)
at org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:93)
at org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:61)
at org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:71)
at org.openmrs.module.referenceapplication.filter.RequireLoginLocationFilter.doFilter(RequireLoginLocationFilter.java:93)
at org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:71)
at org.openmrs.module.web.filter.ModuleFilter.doFilter(ModuleFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.OpenmrsFilter.doFilterInternal(OpenmrsFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Full Error
org.openmrs.ui.framework.ViewException: Error rendering page view for helloWorld. Model properties:
sessionContext
featureToggles
patient
ui
context
contextPath
session
param
out
at org.openmrs.ui.framework.page.GroovyPageView.render(GroovyPageView.java:55)
at org.openmrs.ui.framework.page.PageFactory.processThisFragment(PageFactory.java:187)
at org.openmrs.ui.framework.page.PageFactory.process(PageFactory.java:116)
at org.openmrs.ui.framework.page.PageFactory.handle(PageFactory.java:86)
at org.openmrs.module.uiframework.PageController.handlePath(PageController.java:117)
at org.openmrs.module.uiframework.PageController.handleUrlWithDotPage(PageController.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:177)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.GZIPFilter.doFilterInternal(GZIPFilter.java:65)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.module.web.filter.ForcePasswordChangeFilter.doFilter(ForcePasswordChangeFilter.java:60)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:73)
at org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:93)
at org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:61)
at org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:71)
at org.openmrs.module.referenceapplication.filter.RequireLoginLocationFilter.doFilter(RequireLoginLocationFilter.java:93)
at org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:71)
at org.openmrs.module.web.filter.ModuleFilter.doFilter(ModuleFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.OpenmrsFilter.doFilterInternal(OpenmrsFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.openmrs.ui.framework.ViewException: *** In view 'encountersToday', could not find property 'provider'.
Passed from controller:
sessionContext -> org.openmrs.module.appui.UiSessionContext@270625f8
featureToggles -> org.openmrs.module.appframework.feature.FeatureToggleProperties@7bf66a46
encounters -> [Encounter: [2 2021-10-31 20:15:15.0 Visit Note Laboratory 7 Visit Note num Obs: [Obs #2] num Orders: 0 ], Encounter: [3 2021-10-31 20:24:36.0 Visit Note Laboratory 10 Visit Note num Obs: [Obs #3] num Orders: 0 ], Encounter: [4 2021-10-31 20:27:42.0 Visit Note Laboratory 9 Visit Note num Obs: [Obs #4] num Orders: 0 ]]
patient -> null
ui -> org.openmrs.ui.framework.fragment.FragmentUiUtils@14d033be
context -> org.openmrs.api.context.Context@6871997
contextPath -> openmrs
session -> org.openmrs.ui.framework.session.Session@3d1f547b
param -> org.apache.catalina.util.ParameterMap@2db02aab
out -> java.io.PrintWriter@38e8a160
config -> {start=2021-10-31, end=2021-10-31 23:59:59.999, id=fr2550}
at org.openmrs.ui.framework.fragment.GroovyFragmentView.render(GroovyFragmentView.java:55)
at org.openmrs.ui.framework.fragment.FragmentFactory.processThisFragment(FragmentFactory.java:195)
at org.openmrs.ui.framework.fragment.FragmentFactory.process(FragmentFactory.java:124)
at org.openmrs.ui.framework.page.PageContext.includeFragment(PageContext.java:76)
at org.openmrs.ui.framework.UiUtils.includeFragment(UiUtils.java:162)
at org.openmrs.ui.framework.UiUtils$includeFragment$13.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
at SimpleTemplateScript16.run(SimpleTemplateScript16.groovy:3)
at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.writeTo(SimpleTemplateEngine.java:168)
at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.toString(SimpleTemplateEngine.java:180)
at org.openmrs.ui.framework.page.GroovyPageView.render(GroovyPageView.java:43)
... 72 more
as you can see on the second line in the error messege it returns the result as per request from the frament page but the page itself is not render. could someone please help me on how to fix this and what could be the cause i have been following the document step by step down here below is my fragment controller and .gsp.
fragment controller
package org.openmrs.module.basicexample.fragment.controller;
import org.openmrs.api.EncounterService;
import org.openmrs.ui.framework.annotation.FragmentParam;
import org.openmrs.ui.framework.annotation.SpringBean;
import org.openmrs.ui.framework.fragment.FragmentModel;
import java.util.Calendar;
import java.util.Date;
public class EncountersTodayFragmentController {
private Date defaultStartDate() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
private Date defaultEndDate(Date startDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.add(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.MILLISECOND, -1);
return cal.getTime();
}
public void controller(FragmentModel model, @SpringBean("encounterService") EncounterService service,
@FragmentParam(value = "start", required = false) Date startDate,
@FragmentParam(value = "end", required = false) Date endDate) {
if (startDate == null)
startDate = defaultStartDate();
if (endDate == null)
endDate = defaultEndDate(startDate);
model.addAttribute("encounters",
service.getEncounters(null, null, startDate, endDate, null, null, null, null, null, false));
}
}
fragment gsp
<table>
<tr>
<th>${ ui.message("Encounter.type") }</th>
<th>${ ui.message("Encounter.datetime") }</th>
<th>${ ui.message("Encounter.location") }</th>
<th>${ ui.message("Encounter.provider") }</th>
</tr>
<% if (encounters) { %>
<% encounters.each { %>
<tr>
<td>${ ui.format(it.encounterType) }</td>
<td>${ ui.format(it.encounterDatetime) }</td>
<td>${ ui.format(it.location) }</td>
<td>${ ui.format(it.provider) }</td>
</tr>
<% } %>
<% } else { %>
<tr>
<td colspan="4">${ ui.message("general.none") }</td>
</tr>
<% } %>
</table>
main gsp
${ ui.includeFragment("uiframework", "helloUser") }
${ ui.includeFragment("basicexample","encountersToday", [
start: "2021-10-31",
end: "2021-10-31 23:59:59.999"
]) }
please be so kind to explain the cause and solution thank you