|
Hey guys, I running into an issue when using a dataTable (tomahawk or
core) with selectOneMenu and selectBooleanCheckbox, for some reason its values
are getting “defaulted” or “lost” i.e. on a
selectOneMenu bound to a value object from a collection in the backing bean,
where I have verified that the value is set correctly up until the point it
started rendering the table, some render process sets the value to empty
string, similar with the selectBooleanCheckbox except the value always gets set
to false. I purposely set the values to “true” in the UI and
placed an exception for the check box for anything that set it to false and
here is the sample stack trace I get. This occurs on the rendering phase
of the life cycle i.e. Response phase com.ies.common.error.IESRuntimeException: This should not be
false at
com.ies.scholar.vo.form.FormInstanceVO.setAccessable(FormInstanceVO.java:300) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at
java.lang.reflect.Method.invoke(Method.java:585) at
org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406) at
org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173) at
com.sun.facelets.el.LegacyELContext$LegacyELResolver.setValue(LegacyELContext.java:201) at
com.sun.el.parser.AstValue.setValue(AstValue.java:113) at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:246) at
com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:93) at
com.sun.facelets.el.LegacyValueBinding.setValue(LegacyValueBinding.java:68) at javax.faces.component.UIInput.updateModel(UIInput.java:269) at
javax.faces.component.UIInput.processUpdates(UIInput.java:206) at
javax.faces.component.UIData.process(UIData.java:733) at
javax.faces.component.UIData.processColumnChildren(UIData.java:714) at
javax.faces.component.UIData.processUpdates(UIData.java:622) at
org.apache.myfaces.component.html.ext.HtmlDataTableHack.processUpdates(HtmlDataTableHack.java:133) at
org.apache.myfaces.component.html.ext.HtmlDataTable.processUpdates(HtmlDataTable.java:379) at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:645) at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:645) at
javax.faces.component.UIForm.processUpdates(UIForm.java:87) at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:645) at
javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:157) at
org.apache.myfaces.lifecycle.LifecycleImpl.updateModelValues(LifecycleImpl.java:302) at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:81) at
javax.faces.webapp.FacesServlet.service(FacesServlet.java:137) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:97) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at
com.ies.common.ui.common.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:43) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at
java.lang.Thread.run(Thread.java:595) This stack trace represents the custom exception I threw
when something from the component when through its processUpdates cycle. Here is some sample code: “from the JSF page” <t:dataTable id="centerInstanceList" var="centerForm" value="#{
formBean.formInstances}"
styleClass="detailsGrid"
headerClass="detailsHeader" rowClasses="detailsOnRow,detailsOffRow" rowCountVar="rowCount" rowIndexVar="rowIndex">
…
<t:column style="width:10%"> <f:facet name="header"> <h:outputText value="#{messages.form_center_list_empDoc}" /> </f:facet>
<t:selectOneMenu value="#{centerForm.docuId}">
<f:selectItems value="#{formBean.documentSelectItems}" />
</t:selectOneMenu>
</t:column>
…
<t:column style="width:5%"> <f:facet name="header"> <h:outputText value="#{messages.form_center_list_Sta}" /> </f:facet> <t:selectBooleanCheckbox value="#{centerForm.accessable}"/> </t:column> </t:dataTable> My FormInstanceVO is a pojo except for my debug exception
code snippets (from backing bean formBean.formInstances) public Boolean getAccessable() {
return this.accessable;
} public void setAccessable(Boolean
accessable) {
if(Boolean.FALSE.equals(accessable)) {
IESRuntimeException e = new IESRuntimeException("This should not be
false");
e.printStackTrace();
throw e;
}
this.accessable = accessable;
} An interesting thing to note is that if I change any of
these it a <h:inputText /> or an <h:outputText /> it correctly
display the values that are in the VOs Could someone help me figure out what I am missing? Why
would the dataTable override the values that were preset in the value objects
for a selectBooleanCheckbox or selectOneMenu? I am using MyFaces 1.3 Facelets 1.1.11 hibernate-3.2.0.cr2 Spring Framework 1.2.8 Running on apache-tomcat-5.5.17 TIA Regards, Shawn Recinto |
