【问题标题】:Ajax update does not workAjax 更新不起作用
【发布时间】:2011-10-19 15:32:00
【问题描述】:

为什么#{uImanager.select} 从未更新?

<p:panel id="EditDetailsPanel" header="Edit Details">
    <h:panelGrid columns="2" cellpadding="5">
        <h:outputLabel value="Simple :" />
        <h:selectOneMenu value="#{uImanager.select}">
            <f:selectItem itemValue="val1" itemLabel="Coffee1" />
            <f:selectItem itemValue="val2" itemLabel="Coffee2" />
            <f:selectItem itemValue="val3" itemLabel="Coffee3" />                                  
        </h:selectOneMenu>
    </h:panelGrid>
    <p:commandButton value="Submit" update="EditDetailsForm:EditDetailsPanel"/>
    #{uImanager.select}
</p:panel> 

它指向一个带有getter 和setter 的private String Select;。它在会话范围的托管 bean 中定义。

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    因为您的 update 属性可能指向无效的客户端 ID。如果您注意服务器日志,那么您应该已经从 PrimeFaces 看到类似以下内容:

    INFO: Cannot find component with identifier "EditDetailsForm:EditDetailsPanel" in view.
    

    由于&lt;p:panel&gt;&lt;p:commandButton&gt; 本身位于同一个UINamingContainer 父级中(至少,根据您到目前为止发布的代码),您只需指定其相对客户端ID:

    <p:commandButton value="Submit" update="EditDetailsPanel"/>
    

    或者如果你坚持指定绝对客户端ID,那么你需要在它前面加上::

    <p:commandButton value="Submit" update=":EditDetailsForm:EditDetailsPanel"/>
    

    请注意,这仅在 &lt;h:form&gt; 本身没有另一个 UINamingContainer 父级时才有效。在浏览器中打开页面,右键单击并查看源代码以计算生成的 HTML 元素 ID。最后你需要取那个值,前缀为:

    【讨论】:

    • 这不是问题。这段代码在一个 id="EditDetailsForm" 的表单中
    • 这应该没关系。相对客户端 ID 解析为当前的 UINamingContainer 父级。如果您真的坚持要指定冗长和绝对的客户端 ID,那么您需要在其前面加上 :。但我不明白这有什么用。只需使用我的答案中提到的值即可。
    • 我已将更新更改为 EditDetailsPanel 和 :EditDetailsForm:EditDetailsPanel 但没有机会。parrent 中没有 UINamingContainer
    • 已解决。这段代码在 我将 添加到 commandButton 并且它现在正在工作跨度>
    • 好的。以后不要忽略这个细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2013-06-23
    • 2015-11-01
    相关资源
    最近更新 更多