Ajax¤JSF with Seam
tobad Jul 10, 2006 6:01 AMHi
I've been using Seam for a while now.
I'm currently using 1.0.1 GA with the embedded container in Tomcat.
Right now I have one page with several datatables on it.
When a user clicks on a selection on the first table the other two are updated.
This is currently done via a normal HTTP request but I would like to do this with Ajax4JSF or smiliar instead.
The problem is that when I use Ajax4JSF I get a PropertyNotFoundException even though it worked with a normal s:link.
I read Michael Yuan's blog about problems when having an ejb3 jar but I'm not quite sure if it applies here (I got one general.jar with all ejb's including session beans and then views etc in the war).
The Exception
javax.el.PropertyNotFoundException: Bean: $Proxy158, property: getCategoryDetails at com.sun.facelets.el.LegacyELContext$LegacyELResolver.getValue(LegacyELContext.java:146) at com.sun.el.parser.AstValue.getValue(AstValue.java:117) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192) at com.sun.facelets.el.ELText$ELTextVariable.toString(ELText.java:174) at com.sun.facelets.el.ELText$ELTextComposite.toString(ELText.java:115) at com.sun.facelets.compiler.CommentInstruction.write(CommentInstruction.java:38) at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:433) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChildren(RendererUtils.java:419) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:440) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.renderColumnBody(HtmlTableRendererBase.java:212) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeColumnChild(HtmlTableRendererBase.java:181) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:167) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:100) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:524) at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:234) 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:554) at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) at org.jboss.seam.jsf.SeamViewHandler.renderView(SeamViewHandler.java:59) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
The HTML
<h:form> <h:dataTable var="cat" value="#{categoryList}" rendered="#{categoryList.rowCount>0}" styleClass="datatable" headerClass="" rowClasses="" columnClasses="" > <h:column> <f:facet name="header"> <h:outputText value="Name"/> </f:facet> <!--s:link view-id="../category/overview.html" action="#{listCategoryAction.getCategoryDetails}" value="#{cat.name}"/--> <a4j:commandLink value="#{cat.name}" action="#{listCategoryAction.getCategoryDetails}" reRender="childTable" /> </h:column> </h:dataTable> </h:form> <h:form> <h:dataTable var="cp" value="#{childList}" rendered="#{not empty childList}" styleClass="datatable" headerClass="" rowClasses="" columnClasses="" id="childTable" > ..... </h:dataTable > </h:form>