【问题标题】:JSF Updating Composite Component (Primefaces)JSF 更新复合组件(Primefaces)
【发布时间】:2012-07-26 07:10:46
【问题描述】:

我有以下 UI Primefaces sn-p:

<pou:growl id="growl" 
               redisplay="false"
               showDetail="false" 
               sticky="false" />

当我尝试更新此项目时,例如这样:

<pou:commandButton value="Update" 
                   update=":growl"/>

一切正常。

但是,当我将咆哮移动到复合组件并尝试调用它时(即像这样):

<ez:growl/>

我收到一条错误消息:

javax.faces.FacesException: Cannot find component with identifier ":growl" referenced from "j_idt84:j_idt85:testForm:j_idt111".

我的问题是为什么要添加所有这些自动生成的名称以及如何控制它们以便我可以实际访问要更新的组件?

【问题讨论】:

    标签: jsf primefaces composite-component


    【解决方案1】:

    这是因为复合组件固有地从UINamingContainer 扩展而来(例如&lt;h:form&gt;&lt;h:dataTable&gt; 等),因此在其子组件的客户端ID 前面加上了自己的ID。

    要实现您的特定功能要求,请先为您的复合组件指定一个固定 ID:

    <ez:growl id="growl"/>
    

    然后将 &lt;p:growl&gt; 嵌入到复合组件的实现中,并以复合组件的客户端 ID 作为元素 ID,例如 &lt;div&gt;&lt;span&gt; 的纯 HTML 容器元素:

    <cc:implementation>
        <span id="#{cc.clientId}">
            <p:growl />
        </span>
    </cc:implementation>
    

    现在您可以照常使用update=":growl"

    【讨论】:

    • 我有同样的问题,我不明白如何应用你的答案:我有一个 组件包含在另一个 xhtml 中,在 中。你能告诉我如何适应我的情况吗?谢谢!
    • @loan:您是否使用复合组件? (例如,您使用的是&lt;cc:interface&gt;&lt;cc:implementation&gt;,其中cc 来自http://java.sun.com/jsf/composite)。
    • 不,我有一个简单的 main.xhtml,包含 和一个 和里面我所做的 之一:。此表单位于 内。就这样。在我添加菜单选项卡视图部分之前它一直有效..
    • @loan:那么答案根本不适用于您。继续搜索或提出新问题。同时,如果您遇到问题中提到的错误消息,则此一般答案可能适用:stackoverflow.com/questions/8634156/…
    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 2016-09-27
    • 2015-01-23
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多