【问题标题】:Primefaces - Cannot find component with identifier outside the datatablePrimefaces - 在数据表之外找不到具有标识符的组件
【发布时间】:2012-11-10 01:56:22
【问题描述】:
 <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>    

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

javax.faces.FacesException: Cannot find component with identifier  
":myForm:output"  referenced from "myForm:ss"

【问题讨论】:

  • 您在数据表之外使用变量provider,该变量不再可用。
  • &lt;f:view/&gt; 对于&lt;ui:define/&gt; 是不必要的

标签: jsf primefaces


【解决方案1】:

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

update="@([id$=output])"

这个表达式代表每个 id 以 output 结尾的组件。查看 JQuery 文档了解更多信息。

【讨论】:

  • 我遇到了类似的问题,这个解决方案效果很好。另一个我没有那么幸运,使用 p:component。
  • 我遇到了类似的问题,这就像一个魅力。但是,我认为primefaces已经弃用了...
【解决方案2】:

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

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

引用 BalusC 对Get id of parent naming container in template for in render / update attribute 的回答:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多