我在jsf页面中使用了primefaces lazy数据表,如下所示:
<h:form id="searchForm">
<h:panelGroup id="searchFields">
<h:outputText value="searchField"/>
<p:inputMask
id="txtSearchField"
dir="LTR"
mask="9?999999999999"
maxlength="12"
value="#{myBackBean.searchField}" />
<h:commandButton
id="searchButton"
value="search"
action="{myBackBean.searchAction}" />
</h:panelGroup>
<p:dataTable
id="resultTable"
var="res"
value="#{res.listOfRecords}"
paginator="true" paginatorPosition="bottom" rows="10"
rowsPerPageTemplate="5,10,15"
lazy="true">
<p:column headerText="recordId" sortBy="#{res.recordId}">
<h:outputText value="#{res.recordId}" />
</p:column>
</p:dataTable>
</h:form>
正如您所看到的,dataTable上方有一个搜索面板,其中包含用户可以通过填充结果来缩小结果的参数。对于支持bean中的每个搜索字段都存在相应的属性,如下所示。
@Component
@Scope("request")
public class myBackBean {
private String searchField;
private LazyDataModel<RecordsDto> listOfRecords;
@Autowired
MyService myService;
public String getSearchField() {
return searchField;
}
public void setSearchField(String searchField) {
this.searchField = searchField;
}
public LazyDataModel<OperationsDto> getListOfRecords() {
return listOfRecords;
}
public void setListOfRecords(LazyDataModel<RecordsDto> listOfRecords) {
this.listOfRecords = listOfRecords;
}
public void searchAction() {
// doing the search and filling the list
listOfRecords = ...;
return listOfRecords;
}
}
当我按下&#34; searchButton&#34;后面的bean得到更新,它包含&#34; searchField&#34;用户输入的值。 但是当我尝试使用&#34; recordId&#34;上的排序箭头对网格进行排序时列,我的请求转到&#34; getListOfRecords()&#34;后端bean的方法,但&#34; searchField&#34; value为null。
如何指示数据表排序操作以更新后端bean中的搜索字段?
答案 0 :(得分:0)
如果您的情况可行,请尝试使用会话范围,以便搜索字段值可用。