Primefaces从另一个表单更新表

时间:2014-10-01 16:22:11

标签: jsf primefaces datatable updatemodel

我想从另一个中刷新我的懒惰。我有以下xhtml:

<h:form id="tableform">
    <p:remoteCommand name="updateTable" update="table" />

    <p:dataTable widgetVar="tableWidget" id="table"
        selection="#{personBean.selectedPerson}" selectionMode="single"
        lazy="true" paginator="true" var="person" rowKey="#{person.id}"
        value="#{personBean.personModel}" paginatorPosition="bottom" rows="5"
        paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">            

        <p:column filterBy="#{person.name}" headerText="Names:"
            sortBy="#{person.name}">
            <h:outputText value="#{person.name}" />
        </p:column>


    </p:dataTable>

    <p:commandButton value="buttonInForm2" update=":tableform" />
    <p:commandButton value="buttonInForm" update="@form" />
</h:form>

<h:form>
    <p:commandButton value="directUpdate" update=":tableform" />
    <p:commandButton value="directUpdate" update=":tableform:table" />
    <p:commandButton value="remoteCommand" oncomplete="updateTable()" />
</h:form>

remoteCommand(我当前的解决方案)和from中的按钮正确刷新表格。但是当我使用“directUpdate” - 按钮时,表的filtertext消失了。但我不明白为什么? (过滤器值保留在背景但文本为空)

我知道我可以在表上使用widgetVar.filter(),但是会重置paginator。我的解决方案是remoteCommand,它一切正常,表重新加载当前页面和过滤器。 (欢迎提供更好的解决方案)

为什么重置directUpdate文本和表单更新的问题?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

<p:dataTable>有自己的隐藏输入,用于分页,选择和过滤,以便服务器端知道客户端状态。这样它就可以准备并返回与客户端相同的状态。

如果您提交某个表单,则只会发送特定表单中包含的输入,而不会发送其他表单。这不是JSF特定的问题。 HTML一直都是这样的。否则,万维网看起来会有很大不同。

从表单外部调用<p:remoteCommand>,您基本上就是提交“正确”表单,即包含在其中的表单,其中也包含数据表。

请注意,您本身并不需要<p:commandButton>,只需要一个简单的<p:button ... onclick="updateTable(); return false;">即可。即使是整个第二种形式对于这项工作也是不必要的。