返回bean属性未在primefaces数据表排序操作上更新

时间:2017-07-30 13:58:51

标签: spring jsf primefaces

我在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中的搜索字段?

1 个答案:

答案 0 :(得分:0)

如果您的情况可行,请尝试使用会话范围,以便搜索字段值可用。