复合组件和ajax更新

时间:2012-09-16 23:37:15

标签: jsf primefaces

我需要使用ajax更新复合组件中的表单。在使用它时,我将id作为“comImplContSearch”给复合组件,因此它不会生成随机id。在生成html之后的dom中,我需要调用的表单id(在cc中)是comImplContSearch_contentListForm。并且它在复合组件的f:ajax的update属性中给出。我们在web.xml中使用seperator作为'_'而不是默认':'。有什么我需要纠正,以避免错误。

复合组件代码

<composite:interface>
        <composite:attribute name="id"></composite:attribute>
    </composite:interface>
    <composite:implementation>
        <h:form id="contentLefNavForm" prependId="false">
            <p:tree id="folderTree"
                value="#{contentSearchController.contentListBean.folderTree}"
                var="node" styleClass="folderTree" selectionMode="single"
                animate="true" dynamic="false"
                selection="#{contentSearchController.contentListBean.selectedFolderTreeNode}"
                highlight="false" widgetVar="folderTreeHandle">
                <p:ajax event="select"
                    listener="#{contentSearchController.selectFolderNode}" update="_#{cc.attrs.id}_contentListForm"
                    />
                <p:treeNode styleClass="folderTreeRow"
                    collapsedIcon="iconColor iconFolder"
                    expandedIcon="iconColor iconFolderOpen">
                    <h:outputText value="#{node.title}" />
                </p:treeNode>
            </p:tree>
        </h:form>

        <h:form id="contentListForm" >
           .....................
          </h:form>

使用复合组件时

        <h:form id="searchContentForm" prependId="false">
            <util:contentSearch id="comImplContSearch" />
        </h:form>

错误

19:13:55,969 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/emyed-web].[Faces Servlet]] (http--127.0.0.1-8080-2) Servlet.service() for servlet Faces Servlet threw exception: javax.faces.FacesException: Cannot find component with identifier "_comImplContSearch_contentListForm" referenced from "comImplContSearch_folderTree".
    at org.primefaces.util.ComponentUtils.findClientIds(ComponentUtils.java:251) [primefaces-3.3.1.jar:]
    at org.primefaces.util.AjaxRequestBuilder.addIds(AjaxRequestBuilder.java:102) [primefaces-3.3.1.jar:]
    at org.primefaces.util.AjaxRequestBuilder.update(AjaxRequestBuilder.java:90) [primefaces-3.3.1.jar:]
    at org.primefaces.component.behavior.ajax.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:63) [primefaces-3.3.1.jar:]
    at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.primefaces.renderkit.CoreRenderer.encodeClientBehaviors(CoreRenderer.java:288) [primefaces-3.3.1.jar:]
    at org.primefaces.component.tree.TreeRenderer.encodeScript(TreeRenderer.java:132) [primefaces-3.3.1.jar:]
    at org.primefaces.component.tree.TreeRenderer.encodeEnd(TreeRenderer.java:97) [primefaces-3.3.1.jar:]
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.sun.faces.renderkit.html_basic.CompositeRenderer.encodeChildren(CompositeRenderer.java:78) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55) [primefaces-3.3.1.jar:]
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) [primefaces-3.3.1.jar:]
    at org.primefaces.component.overlaypanel.OverlayPanelRenderer.encodeMarkup(OverlayPanelRenderer.java:55) [primefaces-3.3.1.jar:]
    at org.primefaces.component.overlaypanel.OverlayPanelRenderer.encodeEnd(OverlayPanelRenderer.java:35) [primefaces-3.3.1.jar:]
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]

如果我删除f:ajax中的更新,则表单id为

enter image description here

0 个答案:

没有答案