Using EL Functions in an AJAX request
imkookoo Oct 27, 2008 3:22 PMI'm encountering an issue with using the "rich:clientId" EL function in my application. I wrote a small test and was able to replicate the issue:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%> <%@ taglib uri="http://richfaces.org/rich" prefix="rich" %> <f:view> <h:form id="testForm"> <h:outputText value="#{rich:clientId('testTable')}"/> <h:panelGroup id="testTable" rendered="#{UserPreferencePage.testVisible}"> <h:outputText value="#{rich:clientId('testTable')}"/> </h:panelGroup> <a4j:commandLink value="Test Link" action="#{UserPreferencePage.showTest}" reRender="testTable"/> </h:form> </f:view>
The page above basically is supposed to show the client ID of the testTable component and an a4j command link to display another panel that also has the same client ID text.
When the page above is loaded, it displays "testForm:testTable" just fine, but then you click on the "Test Link" link, you get an exception thrown:
org.apache.jasper.el.JspELException: /wally/Test.jsp(13,4) '#{rich:clientId('testTable')}' Function 'rich:clientId' not found
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
javax.faces.component.UIOutput.getValue(UIOutput.java:184)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:242)
com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:106)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:124)
org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:67)
org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:115)
org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:67)
org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:115)
org.ajax4jsf.renderkit.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:123)
org.ajax4jsf.component.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:677)
org.ajax4jsf.component.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:548)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:271)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:202)
org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:196)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
Is there something I'm doing wrong, or is this a bug?
Regards.