Expression Language error on startup using tree-demo sample
robguest Oct 10, 2007 10:27 AMCan you help me figure out why I am getting a javax.el.ELException when I am using code from the sample tree-demo?
The server output:
Oct 10, 2007 10:49:39 AM com.sun.facelets.FaceletViewHandler handleRenderException
SEVERE: Error Rendering View[/login.xhtml]
javax.el.ELException: /login.xhtml: Bean: com.ridan.cgtip.ui.bean.RichTreeBean, property: onExpand
at com.sun.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:53)
at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39)
at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:232)
at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:239)
at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:239)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:580)
at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:233)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
I have taken the index.jsp and converted it to a facelets-style xhtml page.
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:rich="richfaces.ajax4jsf.org/rich"
>
<ui:define name="container2Contents">
<a4j:outputPanel ajaxRendered="true">
<h:messages />
</a4j:outputPanel>
<h:form>
<h:outputText value="Render facets:" />
<h:selectOneRadio value="#{RichTreeBean.renderFacets}" onclick="submit()">
<f:selectItem itemLabel="true" itemValue="#{true}" />
<f:selectItem itemLabel="false" itemValue="#{false}" />
</h:selectOneRadio>
<br />
<rich:tree id="tree" switchType="ajax"
value="#{RichTreeBean.data}" var="data"
nodeFace="#{data.name != 'param-value' ? 'input' : 'text'}"
changeExpandListener="#{RichTreeBean.onExpand}"
nodeSelectListener="#{RichTreeBean.onSelect}" binding="#{RichTreeBean.tree}"
onselected="window.status='selectedNode: '+event.selectedNode;"
onexpand="window.status='expandedNode: '+event.expandedNode"
oncollapse="window.status='collapsedNode: '+event.collapsedNode"
ajaxSubmitSelection="true" reRender="outputText, selectOneListbox"
preserveModel="none"
dragIndicator="treeIndicator"
immediate="false"
iconCollapsed="#{RichTreeBean.iconCollapsed}"
iconExpanded="#{RichTreeBean.iconExpanded}"
iconLeaf="#{RichTreeBean.iconLeaf}"
icon="#{RichTreeBean.icon}"
>
<f:facet name="icon">
<h:outputText value="icon" rendered="#{RichTreeBean.renderFacets}"/>
</f:facet>
<f:facet name="iconLeaf">
<h:outputText value="leaf" rendered="#{RichTreeBean.renderFacets}"/>
</f:facet>
<f:facet name="iconExpanded">
<h:outputText value="expanded" rendered="#{RichTreeBean.renderFacets}"/>
</f:facet>
<f:facet name="iconCollapsed">
<h:outputText value="collapsed" rendered="#{RichTreeBean.renderFacets}"/>
</f:facet>
<rich:treeNode type="input" oncollapse="Element.removeClassName(event['treeItem'].getElement(), 'colored')" onexpand="Element.addClassName(event['treeItem'].getElement(), 'colored')">
<h:outputText value="#{data} : " />
<h:inputText value="#{data.name}" required="true" styleClass="inputs">
</h:inputText>
</rich:treeNode>
<rich:treeNode type="text" nodeClass="customNode" acceptedTypes="file2" onselected="return false;">
<h:outputText value="#{data}" />
</rich:treeNode>
</rich:tree>
<h:outputText value="Enter path to expand, eg. [webApp_:id__1 , webApp_:id__1:7 ]:" />
<h:inputText value="#{RichTreeBean.pathToExpand}">
<a4j:support event="onchange" reRender="tree" action="#{RichTreeBean.expandNode}"/>
</h:inputText>
<f:verbatim>
<br />
<br />
</f:verbatim>
<rich:tree id="testTree"
var="_data"
switchType="ajax"
ajaxSubmitSelection="true"
preserveModel="none"
value="#{RichTreeBean.data1}"
nodeSelectListener="#{RichTreeBean.onSelectInc}"
nodeFace="node">
<rich:treeNode type="node">
<h:outputText value="#{_data}" />
</rich:treeNode>
</rich:tree>
</h:form>
<a4j:status startText="...start..." />
<a4j:log hotkey="O" />
</ui:define>
</ui:composition>
I basically just renamed the Bean class in the sample to RichTreeBean and that's it.
The Exception seems to be thrown when parsing this line in index.xhtml:
changeExpandListener="#{RichTreeBean.onExpand}""onExpand" is a valid method in RichTreeBean so I am stumped. Any ideas about what is causing this?
Thanks,
Rob