【问题标题】:How to ajax-update the p:dataTable from inside the p:dataTable itself?如何从 p:dataTable 本身对 p:dataTable 进行 ajax 更新?
【发布时间】:2012-09-13 01:00:33
【问题描述】:
<h:form id="formId">
   <p:wizard id="wizardId">
      <p:tab id="tabId">
         <p:dataTable id="tableId">
           <p:column>
             <h:commandLink value="remove" update=""/>
           </p:column>
         </p:dataTable>
      </p:tab>
   </p:wizard>
</h:form>

我只需要更新&lt;p:dataTable&gt; 而不需要整个表单。 我尝试使用@form@parent:formId:wizardId:tabId:tableId,但它们都没有按我的意愿工作。当我使用@form 时,它正在检查我不需要做的验证。

我怎样才能做到这一点?

【问题讨论】:

    标签: ajax jsf-2 datatable primefaces


    【解决方案1】:

    首先,这确实不会与&lt;h:commandLink&gt; 一起使用,因为它根本不支持update 属性。也许你真的打算使用&lt;p:commandLink&gt;

    一旦您将 &lt;h:commandLink&gt; 固定为 &lt;p:commandLink&gt;,然后前往此答案:How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar" 了解如何在 JSF ajax 中引用组件。

    阅读该答案后,您应该已经发现数据表位于:formId:tableId 标识的特定代码sn-p 中。所以,总而言之,应该做到以下几点:

    <p:commandLink value="remove" update=":formId:tableId" />
    

    请注意,在 PrimeFaces 3.3 之前,在某些复杂的 UI 组合中,&lt;p:dataTable&gt; 的 ajax 更新存在错误。这是 PrimeFaces 3.4 中的 fixed。如果您确实遇到了这个问题并且无法升级到 PrimeFaces 3.4,那么您需要将表格包装在一些 &lt;h:panelGroup id="tablePanelId"&gt; 中,然后改用 update=":formId:tablePanelId"

    【讨论】:

    • 感谢您的回复...实际上我使用的是 &lt;p:commandLink&gt; 我拼错了它为 &lt;h:commandLink&gt; 我通过将我的数据表移动到 &lt;h:panelGroup&gt; 得到了解决方案
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2014-05-14
    • 2011-08-07
    • 2012-07-25
    相关资源
    最近更新 更多