控件没有进入Primefaces LazyDataModel加载方法

时间:2017-06-08 19:07:10

标签: primefaces datatable lazydatamodel

在添加lazy属性之前,我能够在数据表中看到数据。添加了lazy属性之后,datatable为空,因为我的调试点从未到达LazyDataModel的load方法内部。换句话说,没有调用load方法,我看到控件直到this.searchResults在我的search()

我刚收到网络服务的结果(效果很好)我查看了大多数链接herehere。我确保设置了lazy属性和setRowCount。也许有人可以帮我解决问题。我正在使用PrimeFaces 6.0,CDI,JSF 2.2,Deltaspike 1.7.2

这是我的JSF

    // other input form fields
    <p:panel style="border-style : none;" styleClass="panelClass">
        <h:panelGrid columns="2">
            <!-- <h:commandButton action="#{search.search}" value="Search" styleClass="button_small_white" /> -->
            <p:commandButton action="#{search.search}" ajax="true" update=":mainform:searchResultTable" value="Search" styleClass="button_small_white" />
            <h:commandButton action="#{search.clear}" value="Clear" styleClass="button_small_white" />                  
        </h:panelGrid>
    </p:panel>
    <br /><p:dataTable value="#{search.searchResults}" var="rec" 
                        rowKey="rec.numTxt"
                        paginator="true" rows="10" 
                        paginatorTemplate=" Display {RowsPerPageDropdown} Records   {FirstPageLink} 
                        {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}  "
                        rowsPerPageTemplate="10,25,50,100" 
                        paginatorPosition="top"  
                        rendered="#{not empty search.searchResults}"
                        id="searchResultTable"
                        widgetVar="searchTable" 
                        lazy="true" 
                        summary="RE Search Results are shown below">

                <p:ajax event="page" listener="#{search.search}" update=":mainform:searchResultTable"  />            
                <p:column headerText="">
                    <p:selectBooleanCheckbox value="#{rec.select}" />
                </p:column>
                ...
            </p:dataTable>  

控制器

@Named("search")
@Stateful
@GroupedConversationScoped
@ConversationGroup(SearchGrp.class)
public class ReSearchController extends BaseWebServicesSearchController<ReSearchSummary>
    implements ReGrp, ReSearchControllerLocal {


@Inject
private GroupedConversation conversation;

@Inject
private WindowContext windowContext;

private LazyDataModel<ReSearchSummary> searchResults;

...

@PostConstruct 
@Override
public void init() {
    // code for initializing my web services
    search();
}

@Override
public String search(){

    this.searchResults = new LazyDataModel<ReSearchSummary>() {

        private static final long serialVersionUID = 4168363870903585956L;

        @Override
        public List<ReSearchSummary> load(int first, int pageSize, String sortField, SortOrder sortOrder,
                Map<String, Object> filters) {

            List<ReSearchSummary> resultsList = null;

            resultsList = search(first, pageSize);

            // rowCount
            setRowCount(getResultCount());
            // I do not need sorting oor filters os did not use them

            return resultsList;
        }
    };
    searchResults.setRowCount(getResultCount());
    return "/cr-re-search.xhtml?faces-redirect=true";
}

@Override
public ArrayList<ReSearchSummary> search(int first, int pageSize){
    // this is my webservice call, this works fine if I call it indepedently
    // criteria gets the form inputs
    return doSearch(criteria.getForm(), pageSize, first);
}
...
}

更新:将h:commandButton转换为p:commandButton作为搜索按钮

<p:commandButton action="#{search.search}" ajax="true" update=":mainform:searchResultTable" value="Search" styleClass="button_small_white" />

并在p:dataTable

中添加了p:ajax
<p:ajax event="page" listener="#{search.search}" update=":mainform:searchResultTable"  />

0 个答案:

没有答案