You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Martin Marinschek (JIRA)" <de...@myfaces.apache.org> on 2006/02/06 15:14:04 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_12365286 ] 

Martin Marinschek commented on MYFACES-855:
-------------------------------------------

I'm missing some stuff in the stack-trace here - please make sure you have checked all logs.

MyFaces should provide you with the ability to see all exception causes along the way, and there is certainly something missing here.

regards,

Martin

> 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