我想从另一个中刷新我的懒惰。我有以下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文本和表单更新的问题?
感谢您的时间。
答案 0 :(得分:1)
<p:dataTable>
有自己的隐藏输入,用于分页,选择和过滤,以便服务器端知道客户端状态。这样它就可以准备并返回与客户端相同的状态。
如果您提交某个表单,则只会发送特定表单中包含的输入,而不会发送其他表单。这不是JSF特定的问题。 HTML一直都是这样的。否则,万维网看起来会有很大不同。
从表单外部调用<p:remoteCommand>
,您基本上就是提交“正确”表单,即包含在其中的表单,其中也包含数据表。
请注意,您本身并不需要<p:commandButton>
,只需要一个简单的<p:button ... onclick="updateTable(); return false;">
即可。即使是整个第二种形式对于这项工作也是不必要的。