Primefaces - 无法在数据表外找到标识符的组件

use*_*840 25 jsf primefaces

 <ui:define name="content">
    <f:view>                        
    <h:form id="myForm" styleClass="form" >

        <p:dataTable var="provider" id="ss"  value="#{providerSelectBean.providerList}" rowKey="#{provider.license}"  

            selection="#{providerSelectBean.selectedProvider}" selectionMode="single"> 

            <p:ajax listener="#{providerSelectBean.onRowSelect}"    
                            update=":myForm:output"event="rowSelect"/>  

            <p:column sortBy="#{provider.license}" width="110" >
                <f:facet name="header">
                    <h:outputText value="License#" />
                </f:facet>
                <h:outputText value="#{provider.license}" />
            </p:column>

            <p:column sortBy="#{provider.prgName}" width="110" >
                <f:facet name="header">
                    <h:outputText value="Program Name" />
                </f:facet>
                <h:outputText value="#{provider.prgName}" />
            </p:column>

        </p:dataTable><br/>

        <p:panelGrid id="output" >
            <h:outputText value="License" />
            <h:outputText value="#{provider.license}" /> 
        </p:panelGrid>

    </h:form>           
    </f:view>

</ui:define>    
Run Code Online (Sandbox Code Playgroud)

这是我第一次使用JSF2.0和primefaces 3.4.1,并<p:ajax update给出了一个错误

javax.faces.FacesException: Cannot find component with identifier  
":myForm:output"  referenced from "myForm:ss"
Run Code Online (Sandbox Code Playgroud)

And*_*dre 27

尝试检查生成的HTML代码,并查看为panelGrid生成的实际ID并更新该ID.如果它恰好是动态的,你总是可以使用JQuery CSS选择器(我发现自己经常这样做).在你的情况下,你可以这样:

update="@([id$=output])"
Run Code Online (Sandbox Code Playgroud)

此表达式表示id以输出结尾的每个组件.有关更多信息,请查看JQuery文档.


小智 25

你也可以使用:#{p:component(componentId)},如

<p:ajax listener="#{providerSelectBean.onRowSelect}"  
update=":#{p:component('output')}" event="rowSelect"/>
Run Code Online (Sandbox Code Playgroud)

引用BalusC的回答来获取渲染/更新属性中模板中父命名容器的id:

p:component是一个辅助函数,它扫描整个视图根,查找具有给定ID的组件,然后返回其客户端ID.