org.openmrs.ui.framework.ViewException

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

@kdaud @sharif @mozzy @ruhanga @gcliff if you please

do you have the whole source code of your module some where on github ??

well i had not created a git repository for it as yet @mozzy

share the full log report via pastebin.com

Looking at this

org.openmrs.ui.framework.ViewException: *** In view 'encountersToday', could not find property 'provider'.
Passed from controller:

The encounter object no longer has a property provider

its now encounterProviders

.for now

simply have your fragment as

<table>
    <tr>
        <th>${ ui.message("Encounter.type") }</th>
        <th>${ ui.message("Encounter.datetime") }</th>
        <th>${ ui.message("Encounter.location") }</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>
      
            </tr>
        <% } %>
    <% } else { %>
        <tr>
            <td colspan="4">${ ui.message("general.none") }</td>
        </tr>
    <% } %>
</table>

okay i see so how should i go about it

am i supposed to specify a personProvider? if so how ?

thanks for the reply

i thought you could see the log clearly here! is it not formatted well :thinking: :thinking:

Just look at the attributes of the encounter class and use any .

But i understand you simply want to learn the UI framework .

just have your fragment as below

<table>
    <tr>
        <th>${ ui.message("Encounter.type") }</th>
        <th>${ ui.message("Encounter.datetime") }</th>
        <th>${ ui.message("Encounter.location") }</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>
      
            </tr>
        <% } %>
    <% } else { %>
        <tr>
            <td colspan="4">${ ui.message("general.none") }</td>
        </tr>
    <% } %>
</table>

its exactly what i have @mozzy

thats is why its so confusing

i have redone over and again even copied and pasted still i recieve the some exception

@josephbate i simply removed the
<td>${ ui.format(it.provider) }</td>
which was causing the issue,

you cant have the same exception :face_with_thermometer:

Have you recompiled your module and reloaded it??

1 Like

ahh yes fnally it works

thanks @mozzy you’re a life saver :yum: :blush:

had forgot to compile :man_facepalming: