You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Simon Kitching (JIRA)" <de...@myfaces.apache.org> on 2005/11/30 21:46:31 UTC

[jira] Commented: (MYFACES-855) FacesException: Cannot get value for expression '...' when expression is valid

    [ http://issues.apache.org/jira/browse/MYFACES-855?page=comments#action_12358956 ] 

Simon Kitching commented on MYFACES-855:
----------------------------------------

Brett, have you made any progress on your investigations into this issue you reported?

> FacesException: Cannot get value for expression '...' when expression is valid
> ------------------------------------------------------------------------------
>
>          Key: MYFACES-855
>          URL: http://issues.apache.org/jira/browse/MYFACES-855
>      Project: MyFaces
>         Type: Bug
>   Components: General
>     Versions: 1.1.0
>  Environment: IBM WebSphere 5.1.1.3, Windows Server 2003, JDK 1.4.2, Hibernate 3.0
>     Reporter: Brett Sabell

>
> I have a dataTable whose value is a List property ( ruleInstanceList ) in a backing bean ( listRuleInstancesBean ). The List is populated by Hibernate 3.0, and is accessible via its own public getter/setter methods in the bean ( getRuleInstanceList() and setRuleInstanceList() ). However, when I attempt to display the page I receive the following message ( instead of the dataTable ):
> Error 500: Cannot get value for expression '#{ruleInstanceRow.ruleInstanceId}'
> "ruleInstanceRow" is the var set up for the dataTable, and is of type RuleInstance ( a class I wrote ). This class contains a property called "ruleInstanceId", which has public getter/setter methods. Other columns are included in the dataTable and are mapped to other properties in ruleInstanceRow, but ruleInstanceId is the first; I removed it, tried again, and received the same error for the next column.
> In the systemOut.log file for WebSphere, the following exception stack trace was dumped:
> [22/11/05 10:51:49:844 EST] 3a5327e8 WebGroup      E SRVE0026E: [Servlet Error]-[Cannot get value for expression &#39;#{ruleInstanceRow.ruleInstanceId}&#39;]: javax.faces.FacesException: Cannot get value for expression '#{ruleInstanceRow.ruleInstanceId}'
> 	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:421)
> 	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
> 	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
> 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
> 	at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
> 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
> 	at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
> 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
> 	at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
> 	at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
> 	at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
> 	at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:76)
> 	at com.thenational.filter.RoleFilter.doFilter(RoleFilter.java:107)
> 	at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
> 	at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
> 	at jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:118)
> 	at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
> 	at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
> 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1040)
> 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:600)
> 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:201)
> 	at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:125)
> 	at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:286)
> 	at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
> 	at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
> 	at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
> 	at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
> 	at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:624)
> 	at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:458)
> 	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:912)
> Caused by: javax.servlet.ServletException: Cannot get value for expression '#{ruleInstanceRow.ruleInstanceId}'
> 	at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:416)
> 	at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:683)
> 	at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:781)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> 	at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
> 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
> 	at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
> 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
> 	at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
> 	at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
> 	at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
> 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1044)
> 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:600)
> 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:201)
> 	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
> 	... 29 more
> The backing bean is configured in my faces-config.xml file, with the correct package/class. I put in some debugging statements in my getRuleInstanceList() method, and determined that a valid non-null List is correctly being returned by Hibernate, and it contains one element of type RuleInstance, which has all of the properties that are referenced in the dataTable columns. Therefore, I cannot see why MyFaces can't get the values!
> Here are the relevant snippets of code:
> faces-config.xml
> =============
> <managed-bean>
> 	<managed-bean-name>listRuleInstancesBean</managed-bean-name>
> 	<managed-bean-class>com.thenational.otkr.dmi.beans.ListRuleInstancesBean</managed-bean-class>
> 	<managed-bean-scope>request</managed-bean-scope>
> </managed-bean>
> ListRuleInstancesBean.java
> ======================
> public class ListRuleInstancesBean extends BaseBean
> {
> 	protected UIData ruleInstanceTable;
> 	private List ruleInstanceList;
> 	private static final Logger logger = Logger.getLogger(ListRuleInstancesBean.class);
> 	
> 	public List getRuleInstanceList()
> 	{
> 		if (ruleInstanceList == null)
> 		{
> 			ruleInstanceList = new ArrayList(0);
> 			
> 			try
> 			{
> 				ruleInstanceList = getDao().getAllRuleInstances(); // getDao() returns a Hibernate3 DAO object
> 			}
> 			catch (Exception e)
> 			{
> 				// Log error
> 				logger.error("Exception in getRuleInstanceList(): " + e.toString());
> 			}
> 		}
> 		
> 		return ruleInstanceList;
> 	}
> 	
> 	public void setRuleInstanceList(List ruleInstanceList)
> 	{
> 		this.ruleInstanceList = ruleInstanceList;
> 	}
> 	public UIData getRuleInstanceTable()
> 	{
> 		return ruleInstanceTable;
> 	}
> 	public void setRuleInstanceTable(UIData ruleInstanceTable)
> 	{
> 		this.ruleInstanceTable = ruleInstanceTable;
> 	}
> }
> RuleInstance.java
> ==============
> public class RuleInstance extends ModelBase implements Comparable
> {
>     private Long ruleInstanceId;
>     private Long ruleId;
>     private String ruleInstanceGroup;
>     private Long schemaInstanceId;
>     private Long deskId;
>     private Long sourceSystemId;
>     private Integer severity;
>     private boolean activeFlag = false;
>     public Long getRuleInstanceId() {
>         return ruleInstanceId;
>     }
>     public void setRuleInstanceId(Long ruleInstanceId) {
>         this.ruleInstanceId = ruleInstanceId;
>     }
>     public Long getRuleId() {
>         return ruleId;
>     }
>     public void setRuleId(Long ruleId) {
>         this.ruleId = ruleId;
>     }
>     public String getRuleInstanceGroup() {
>         return ruleInstanceGroup;
>     }
>     public void setRuleInstanceGroup(String ruleInstanceGroup) {
>         this.ruleInstanceGroup = ruleInstanceGroup;
>     }
>     public Long getSchemaInstanceId() {
>         return schemaInstanceId;
>     }
>     public void setSchemaInstanceId(Long schemaInstanceId) {
>         this.schemaInstanceId = schemaInstanceId;
>     }
>     public Long getDeskId() {
>         return deskId;
>     }
>     public void setDeskId(Long deskId) {
>         this.deskId = deskId;
>     }
>     public Long getSourceSystemId() {
>         return sourceSystemId;
>     }
>     public void setSourceSystemId(Long sourceSystemId) {
>         this.sourceSystemId = sourceSystemId;
>     }
>     public Integer getSeverity() {
>         return severity;
>     }
>     public void setSeverity(Integer severity) {
>         this.severity = severity;
>     }
>     public boolean isActiveFlag() {
>         return activeFlag;
>     }
>     
>     public boolean getActiveFlag() {
>         return activeFlag;
>     }
>     public void setActiveFlag(boolean activeFlag) {
>         this.activeFlag = activeFlag;
>     }
> }
> listRuleInstances.jsp
> =================
> <h:dataTable id="listRuleInstancesTable"
> 	value="#{listRuleInstancesBean.ruleInstanceList}"
> 	binding="#{listRuleInstancesBean.ruleInstanceTable}"
> 	var="ruleInstanceRow"
> 	headerClass="DashPartTitle"
> 	rowClasses="DashPartBody"
> 	cellspacing="0"
> 	cellpadding="2"
> 	frame="border"
> 	rules="all">
> 	<h:column>
> 		<f:facet name="header">
> 			<h:outputText value="Rule Instance Id"/>
> 		</f:facet>
> 		<h:outputText value="#{ruleInstanceRow.ruleInstanceId}"/>
> 	</h:column>
> 	<h:column>
> 		<f:facet name="header">
> 			<h:outputText value="Rule Instance Group"/>
> 		</f:facet>
> 		<h:outputText value="#{ruleInstanceRow.ruleInstanceGroup}"/>
> 	</h:column>
> 	<h:column>
> 		<f:facet name="header">
> 			<h:outputText value="Severity"/>
> 		</f:facet>
> 		<h:outputText
> 			value="ERROR"
> 			rendered="#{ruleInstanceRow.severity == '0'}"/>
> 		<h:outputText
> 			value="WARN"
> 			rendered="#{ruleInstanceRow.severity == '1'}"/>
> 		<h:outputText
> 			value="INFO"
> 			rendered="#{ruleInstanceRow.severity == '2'}"/>
> 	</h:column>
> 	<h:column>
> 		<f:facet name="header">
> 			<h:outputText value="Active"/>
> 		</f:facet>
> 		<h:outputText
> 			value="Yes"
> 			rendered="#{ruleInstanceRow.activeFlag == 'true'}"/>
> 		<h:outputText
> 			value="No"
> 			rendered="#{ruleInstanceRow.activeFlag == 'false'}"/>
> 	</h:column>
> </h:dataTable>
> I have other dataTable's in my application, all of which follow the exact same pattern as this, and all of which work correctly. Thinking that there might have been a problem connecting the JSP page to the backing bean, I changed the getAllRuleInstances() method above to return a List of different classes, and changed the column references in the dataTable to the different class, and the dataTable worked correctly. This tells me that MyFaces may have a problem with the RuleInstance class, but without more detailed exception information I can't see what that might be.
> Just to clarify, I am using JDK 1.4.2. I have seen a dataTable example that used a paramaterized List ( List<...> ) to tell Java what class each element would be an instance of, which might aid MyFaces in displaying the dataTable. I understand that paramaterized types are only supported in JDK 1.5+, so I cannot go down this path.
> This problem seems to defy logic, and I have been beating my head against the wall trying to solve it. Is there something hidden away that can cause a dataTable to throw this exception for no apparent reason?
> Any ideas? I appreciate any time you can spend looking at this, so thanks in advance.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira