我正在设计一个应用程序,其中某些输入源通过primefaces数据表输入。
版本规范: PrimeFaces - 4.0 JSF - 2.1.6
面临的问题: 更新数据表后分页中断。看起来在数据表中触发更新事件之前,分页工作完美。映射到此数据表的列表位于“视图范围”下。
请在下面找到我的数据表的XHTML代码,
<p:dataTable var="profile" value="#{manualNBean.manualNlist}"
rows="10" paginator="true" paginatorPosition="bottom"
rowIndexVar="rowIndex" lazy="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,50,100,200" id="statustab">
<p:column headerText="S.No">
<p:outputLabel value="#{rowIndex+1}" />
</p:column>
<p:column headerText="Profile ID">
<p:outputLabel value="#{profile.profileID}" />
</p:column>
<p:column headerText="Law Firm Name">
<p:outputLabel value="#{profile.lawFirmName}" />
</p:column>
<p:column headerText="First Name">
<p:outputLabel value="#{profile.firstName}" />
</p:column>
<p:column headerText="Second Name">
<p:outputLabel value="#{profile.secondName}" />
</p:column>
<p:column headerText="Full Name">
<p:outputLabel value="#{profile.fullName}" />
</p:column>
<p:column headerText="Profile Link">
<h:outputLink value="#{profile.profileLink}" target="_blank">#{profile.profileLink}</h:outputLink>
</p:column>
<p:column headerText="PPTS N" id="editNCol">
<p:commandButton icon="ui-icon-pencil" process="@this"
update="statustab" rendered="#{profile.editbuttonRender}"
action="#{manualNBean.turnoffRender}">
<f:setPropertyActionListener value="#{profile}"
target="#{manualNBean.manualNDTO}" />
</p:commandButton>
<p:autoComplete id="manualN" minQueryLength="3"
value="#{profile.manualN}"
style="#{profile.autocompletebuttonRender}"
completeMethod="#{manualNBean.autocompleteN}">
</p:autoComplete>
</p:column>
</p:dataTable>
此处,在命令按钮中执行更新操作。即使在执行更新操作之后,懒惰模型似乎仍然填充了数据库中的记录,但我想知道为什么分页会中断。
注意:通过向按钮添加ajax =“false”属性,页面重新加载,现在分页似乎正常工作。但是,这是不可行的,并期待用Ajax控制它。
只需添加另一个注释,此数据表仅在单击按钮后才从数据库中填充信息。
有人可以告诉我哪里出错吗?
答案 0 :(得分:2)
我没有在update
上使用p:commandButton
属性,而是从action方法更新一行。现在分页似乎没有打破。那么有两种选择,我先使用它。
使用OmniFaces AJAX实用程序。
p:commandButton
属性action
中使用的解决方案如下,
public void updateRow(UIData table) {
int index = table.getRowIndex();
Ajax.updateRow(table, index);
}
以搜索表达式框架的形式使用普通的PrimeFaces解决方案 documentation和showcase
服务器端方法如下所示:
public void updateRow(UIData table) {
int index = table.getRowIndex();
RequestContext.update(table.getClientId() + ":@row(" + index + ")");
}