我有jsf primefaces 6.1实时滚动,每次滚动100行。默认情况下,所有行都是禁用的。每行都有编辑命令,单击该按钮可以启用特定行进行编辑。我从上到下随机滚动,然后单击每个编辑行,然后就可以进行编辑了。
在实时滚动过程中,我将到达最后一个记录(即第500个记录)的末尾。我想对一组选定的行进行编辑。
每次单击“编辑”按钮时,页面都会刷新并显示前100条记录。此页面刷新是为了避免显示重复的记录。为了转到第500条记录,您必须再次进行实时滚动。
我的问题是,在1至500条记录之间来回滚动时,可编辑下拉菜单(p:selectOneMenu component value)
中的数据被删除了。这些下拉列表显示空白值,而不显示默认值。
请让我知道在实时滚动时如何在selectOneMenu组件的值上保留默认数据。
还有其他inputtext字段可以通过保留默认数据来正常工作。问题仅在于p:selectOneMenu
下拉菜单。
<p:dataTable id="datatableid"
value="#{bean.list}"
var="rec" resizableColumns="true" resizeMode="expand"
liveScroll="true" scrollHeight="100%" scrollWidth="100%" scrollable="true" rowIndexVar="rowIdx" scrollRows="100">
<p:column headerText="*State" width="250">
<p:selectOneMenu id="stateid" disabled="${!rec.editable}"
value="${rec.state}" > // this value is erased during live scrolling the page.
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="bean.stateslist"
var="item" itemValue="#{item.statevalue}"
itemLabel="#{item.statename}" />
</p:selectOneMenu>
</p:column>
<p:column headerText="Edit" width="50">
<p:commandButton id="EditBtn"
action="#{bean.editRecord(rec)}"
update="datatableid">
</p:commandButton>
</p:column>
java代码:
public String editRecord(DTOClass a_selectedRow) {
// this code Refreshing page for resetting live scrolling to first 100 //records to avoid duplicate display of rows.
FacesContext context = FacesContext.getCurrentInstance();
String refreshpage = context.getViewRoot().getViewId();
ViewHandler handler = context.getApplication().getViewHandler();
UIViewRoot root = handler.createView(context, refreshpage);
root.setViewId(refreshpage);
context.setViewRoot(root);
// this code enables the row for editing.
a_selectedRow.setEditable(true);
return null;
}