[KULRICE-13896] EditWithDialog fails when collection item contains render flag Created: 03/Oct/14  Updated: 16/Jan/15

Status: Open
Project: Kuali Rice Development
Component/s: Development
Affects Version/s: 2.5
Fix Version/s: 2.6
Security Level: Public (Public: Anyone can view)

Type: Bug Fix Priority: Major
Reporter: Douglas Pace Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: Old
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Similar issues:
KULRICE-9044KRAD "stacked" collection elements are not rendering add/delete buttons
KULRICE-12670Input field not rendering on collection add line item
KULRICE-12791AddWithDialog does not contain any items
KULRICE-10048row css does not move with collection items on sort when CollectionGroup.useServerPaging=true
KULRICE-13898EditWithDialog with custom dialog removes anything not a datafield or collectiongroup
KULRICE-12915Expressions not evaluated in collection group items
KULRICE-8099collections items need to be separated from the subcollection group
KULRICE-9603Ajax request for table detail content fails the second time when the detail contains a nested placeholder
KULRICE-9607When content is retrieved that contains a nested collection group binding is not adjusted correctly
KULRICE-7532required validation fails in StackedCollectionSubSection addLine
Rice Module:
KRAD
Application Requirement:
KC
KAI Review Status: Not Required
KTI Review Status: Not Required
Code Review Status: Not Required
Include in Release Notes?:
Yes
Story Points: 8

 Description   

When using collection's new editWithDialog feature, the following stack trace is generated when one of the collectionGroup's items contains a render flag, like p:render="@

{#isAddLine}".
2014-10-03 11:57:32,520 [http-bio-8080-exec-9] u:quickstart/d: ERROR org.kuali.rice.krad.web.controller.UifHandlerExceptionResolver - Error getting property 'currentPage.items[0].layoutManager.allRowFields[11].group.items[2]' from org.kuali.rice.krad.uif.view.FormView@73399a12
java.lang.IllegalArgumentException: Error getting property 'currentPage.items[0].layoutManager.allRowFields[11].group.items[2]' from org.kuali.rice.krad.uif.view.FormView@73399a12
	at org.kuali.rice.krad.uif.util.ObjectPropertyUtils.getPropertyValue(ObjectPropertyUtils.java:329)
	at org.kuali.rice.krad.uif.lifecycle.ViewLifecycle.performComponentLifecycle(ViewLifecycle.java:252)
	at org.kuali.rice.krad.web.service.impl.ModelAndViewServiceImpl.invokeViewLifecycle(ModelAndViewServiceImpl.java:289)
	at org.kuali.rice.krad.web.service.impl.ModelAndViewServiceImpl.prepareView(ModelAndViewServiceImpl.java:263)
	at org.kuali.rice.krad.web.controller.UifControllerHandlerInterceptor.postHandle(UifControllerHandlerInterceptor.java:188)
	at org.springframework.web.servlet.HandlerExecutionChain.applyPostHandle(HandlerExecutionChain.java:149)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:928)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.kuali.rice.kew.web.UserPreferencesFilter.doFilter(UserPreferencesFilter.java:78)
	at org.kuali.rice.kew.web.UserPreferencesFilter.doFilter(UserPreferencesFilter.java:62)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.kuali.rice.krad.web.filter.UserLoginFilter.doFilter(UserLoginFilter.java:89)
	at org.kuali.rice.krad.web.filter.UserLoginFilter.doFilter(UserLoginFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.kuali.rice.krad.web.filter.BootstrapFilterChain.doFilter(BootstrapFilter.java:327)
	at org.kuali.rice.krad.web.filter.DummyLoginFilter.doFilter(DummyLoginFilter.java:82)
	at org.kuali.rice.krad.web.filter.DummyLoginFilter.doFilter(DummyLoginFilter.java:62)
	at org.kuali.rice.krad.web.filter.BootstrapFilterChain.doFilter(BootstrapFilter.java:320)
	at org.kuali.rice.krad.web.filter.BootstrapFilter.doFilter(BootstrapFilter.java:199)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.kuali.coeus.sys.framework.controller.interceptor.PerformanceLoggingFilter.doFilter(PerformanceLoggingFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.kuali.coeus.sys.framework.controller.interceptor.SessionExpiredFilter.doFilter(SessionExpiredFilter.java:40)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.kuali.rice.krad.web.filter.HideWebInfFilter.doFilter(HideWebInfFilter.java:68)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:214)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.RuntimeException: Class to retrieve property from was null
	at org.kuali.rice.krad.uif.util.ObjectPropertyUtils$ObjectPropertyMetadata.<init>(ObjectPropertyUtils.java:1127)
	at org.kuali.rice.krad.uif.util.ObjectPropertyUtils$ObjectPropertyMetadata.<init>(ObjectPropertyUtils.java:979)
	at org.kuali.rice.krad.uif.util.ObjectPropertyUtils.getMetadata(ObjectPropertyUtils.java:966)
	at org.kuali.rice.krad.uif.util.ObjectPropertyUtils.getReadMethod(ObjectPropertyUtils.java:153)
	at org.kuali.rice.krad.uif.util.ObjectPropertyReference$ReferencePathEntry.parse(ObjectPropertyReference.java:141)
	at org.kuali.rice.krad.uif.util.ObjectPathExpressionParser$ParseState.step(ObjectPathExpressionParser.java:211)
	at org.kuali.rice.krad.uif.util.ObjectPathExpressionParser$ParseState.access$600(ObjectPathExpressionParser.java:57)
	at org.kuali.rice.krad.uif.util.ObjectPathExpressionParser.parsePathExpression(ObjectPathExpressionParser.java:361)
	at org.kuali.rice.krad.uif.util.ObjectPropertyReference.resolvePath(ObjectPropertyReference.java:365)
	at org.kuali.rice.krad.uif.util.ObjectPropertyUtils.getPropertyValue(ObjectPropertyUtils.java:326)
	... 55 more


And code in KC that generated error


<bean id="PropBudget-SubawardsPage" parent="PropBudget-SubawardsPage-parentBean" />
<bean id="PropBudget-SubawardsPage-parentBean" parent="PropBudget-Page">
<property name="items">
<list>
<ref bean="PropBudget-SubawardsPage-CollectionGroup" />
</list>
</property>
<property name="header">
<bean parent="Uif-PageHeader" />
</property>

</bean>

<bean id="PropBudget-SubawardsPage-CollectionGroup"
parent="PropBudget-SubawardsPage-CollectionGroup-parentBean" />
<bean id="PropBudget-SubawardsPage-CollectionGroup-parentBean"
parent="Uif-TableCollectionSection" abstract="true" p:headerText="Subawards"
p:propertyName="budget.budgetSubAwards"
p:collectionObjectClass="org.kuali.coeus.propdev.impl.budget.subaward.BudgetSubAwards"
p:addWithDialog="true" p:layoutManager.renderSequenceField="false"
p:editWithDialog="true" p:customEditLineDialog="true">
<property name="editLineDialogPrototype">
<bean parent="PropBudget-Subawards-Details-Section"/>
</property>
<property name="layoutManager.richTable.templateOptions">
<map>
<entry key="sDom" value="tip" />
<entry key="bRetrieve" value="true" />
<entry key="bPaginate" value="false" />
<entry key="bInfo" value="false" />
</map>
</property>
<property name="addWithDialogAction">
<bean parent="Uif-AddWithDialogAction" p:actionLabel="Add Subaward" p:cssClasses="pull-right" p:iconClass="icon-plus"/>
</property>
<property name="addLineDialog">
<bean id="PropBudget-SubawardsPage-CollectionGroup-AddDialog" parent="Uif-AddLineDialog" p:headerText="Add Subaward">
<property name="footer.items">
<list>
<bean parent="Uif-DialogDismissButton" p:actionLabel="Cancel"/>
<bean parent="Uif-AddLineAction-Dialog" p:actionLabel="Add Subaward" p:dialogDismissOption=""
p:successCallback="Kc.PropDev.Budget.closeDialogWithoutError('PropBudget-SubawardsPage-CollectionGroup-AddDialog');"/>
</list>
</property>
</bean>
</property>
<property name="header.lowerGroup">
<bean parent="Uif-HeaderLowerGroup">
<property name="items">
<list>
<bean parent="Uif-Message"
p:messageText="Upload a pre-formatted budget document for a subawardee organization or enter details manually."
p:order="10" />
</list>
</property>
</bean>
</property>
<property name="items">
<list>
<bean parent="Uif-InputField" p:propertyName="organizationId"
p:order="10" p:readOnly="@{!#isAddLine}" p:propertyNamesForAdditionalDisplay="organization.organizationName"
p:readOnlyDisplayReplacement="@{#fp.organization?.organizationName} (@{#fp.organizationId})"/>
<bean parent="Uif-InputField" p:propertyName="subAwardXfdFileName" p:label="File Name"
p:order="20" p:render="@{!#isAddLine}" p:readOnly="true"/>
<bean parent="Uif-InputField" p:propertyName="newSubAwardFile" p:label="File Name"
p:order="30" p:render="@{#isAddLine}

">
<property name="control">
<bean parent="Uif-FileControl"/>
</property>
</bean>
<bean parent="Uif-InputField" p:propertyName="comments" p:order="40" p:render="@

{#isAddLine}

"/>
</list>
</property>
<property name="lineActions">
<list>
<bean parent="Uif-DeleteLineAction-IconOnly" p:order="40"
p:iconClass="icon-trash" />
</list>
</property>
</bean>

<bean id="PropBudget-Subawards-Details-Section" parent="PropBudget-Subawards-Details-Section-parent" />
<bean id="PropBudget-Subawards-Details-Section-parent"
parent="Uif-DialogGroup" p:headerText="Add Subaward">
<property name="items">
<list>
<bean parent="PropBudget-SubawardsAttachments-Buttons-Section" p:order="10" />
<bean parent="PropBudget-SubawardsAttachments-Details-Section" p:order="20" />
</list>
</property>
<property name="footer.items">
<list>
<bean parent="Uif-PrimaryActionButton" p:actionLabel="Save Changes" p:order="10" />
<bean parent="Uif-DialogDismissButton" p:actionLabel="Cancel" p:order="20" />
</list>
</property>
</bean>

<bean id="PropBudget-SubawardsAttachments-Buttons-Section"
parent="PropBudget-SubawardsAttachments-Buttons-Section-parent" />
<bean id="PropBudget-SubawardsAttachments-Buttons-Section-parent"
parent="Uif-HorizontalFieldGroup" p:label="Attachment Details">
<property name="items">
<list>
<bean p:actionLabel="View PDF" parent="Uif-SecondaryActionButton-Small"
p:style="float: right;" p:order="10" />
<bean p:actionLabel="View XML" parent="Uif-SecondaryActionButton-Small"
p:style="float: right;" p:order="20" />
<bean p:actionLabel="Sync from PDF" parent="Uif-SecondaryActionButton-Small"
p:style="float: right;" p:order="30" />
<bean p:actionLabel="Replace" parent="Uif-SecondaryActionButton-Small"
p:style="float: right;" p:order="40" />
<bean p:actionLabel="Delete" parent="Uif-SecondaryActionButton-Small"
p:style="float: right;" p:order="50" />
</list>
</property>
</bean>

<bean id="PropBudget-SubawardsAttachments-Details-Section"
parent="PropBudget-SubawardsAttachments-Details-Section-parent" />
<bean id="PropBudget-SubawardsAttachments-Details-Section-parent"
parent="Uif-HorizontalBoxGroup">
<property name="items">
<list>
<bean parent="PropBudget-SubawardsAttachments-Subdetails-Section" p:order="10" />
<bean parent="Uif-InputField" p:propertyName="comments" p:order="20"/>
<bean p:actionLabel="Edit Comments" parent="Uif-SecondaryActionButton-Mini" p:order="30" p:style="float: left;" />
<bean parent="PropBudget-SubawardsAttachments-Details-CollectionGroup" p:order="40" />
</list>
</property>
</bean>

<bean id="PropBudget-SubawardsAttachments-Subdetails-Section"
parent="PropBudget-SubawardsAttachments-Subdetails-Section-parent" />
<bean id="PropBudget-SubawardsAttachments-Subdetails-Section-parent"
parent="Uif-CssGridSubSection-2FieldLabelColumn">
<property name="items">
<list>
<bean parent="Uif-InputField" p:propertyName="organizationName" p:order="10"/>
<bean parent="Uif-InputField" p:propertyName="formName" p:order="20"/>
<bean parent="Uif-InputField" p:propertyName="subAwardXfdFileName" p:order="30"/>
<bean parent="Uif-InputField" p:propertyName="budgetSubAwardAttachments"
p:label="Attachments" p:order="40"/>
<bean parent="Uif-InputField" p:propertyName="xfdUpdateTimestamp" p:order="50" />
<bean parent="Uif-InputField" p:propertyName="xmlUpdateTimestamp" p:order="60" />
<bean parent="Uif-InputField" p:propertyName="subAwardStatusCode" p:order="70" />
<bean parent="Uif-InputField" p:propertyName="namespace" p:order="80" />
</list>
</property>
</bean>

<bean id="PropBudget-SubawardsAttachments-Details-CollectionGroup"
parent="PropBudget-SubawardsAttachments-Details-CollectionGroup-parentBean" />
<bean id="PropBudget-SubawardsAttachments-Details-CollectionGroup-parentBean"
parent="Uif-TableCollectionSection" abstract="true" p:headerText="Details"
p:propertyName="newBudgetSubaward"
p:collectionObjectClass="org.kuali.coeus.propdev.impl.budget.subaward.BudgetSubAwards"
p:addWithDialog="false" p:layoutManager.renderSequenceField="false"
p:renderLineActions="false">
<property name="layoutManager.richTable.templateOptions">
<map>
<entry key="sDom" value="tip" />
<entry key="bRetrieve" value="true" />
<entry key="bPaginate" value="false" />
<entry key="bInfo" value="false" />
</map>
</property>
<property name="items">
<list>
<bean parent="Uif-InputField" p:propertyName="totalDirectCost"
p:order="10"/>
<bean parent="Uif-InputField" p:propertyName="totalIndirectCost"
p:order="20"/>
<bean parent="Uif-InputField" p:propertyName="costSharingAmount"
p:order="30"/>
<bean parent="Uif-InputField" p:propertyName="totalCost"
p:label="Total Cost" p:order="40"/>
</list>
</property>
</bean>




 Comments   
Comment by Brian Smith (Inactive) [ 03/Oct/14 ]

This is caused by rendering differing between add and table lines
Recommendations:
the fields should not be taken into account at all for custom dialogs being shown
and it shouldn't blow up for a normal edit if some columns are not rendered for every line

So it needs to work in the following cases:
There is a column that is not rendered
There is a field that is not rendered in an add line dialog/group but is rendered for all lines

Throw exception when column count differs for lines that are part of the table

Generated at Thu Apr 09 01:44:17 CDT 2020 using JIRA 6.1.5#6160-sha1:a61a0fc278117a0da0ec9b89167b8f29b6afdab2.