PrimeFaces LazyDataModel在呈现dataTable之后,整个页面被阻塞



调用LazyDataModelload()方法,并成功退出。dataTable被渲染,但唯一的问题是,整个页面被阻止,按钮不给任何响应,除了一个是执行JavaScript。

我认为有Ajax的东西,而AjaxStatus显示的东西正在加载,但没有什么加载。

我使用的是PrimeFaces 3.4.2和Mojarra 2.1.6

这里是我的。xhtml,在选项。xhtml是另一个h:形式声明

<ui:include src="options.xhtml" />
      <h:form id="display">
         ...
         <p:dataTable id="resultsTable" value="#{index.lazyModel}"
            var="searchResult" rows="10" paginator="true" emptyMessage=""
            paginatorPosition="bottom" lazy="true"
            rendered="#{empty index.lazyModel ? false : true}">
            <p:column>
               <h:panelGrid columns="1">
                  <h:panelGrid columns="2">
                     <h:outputLink value="#{searchResult.url}">
                        <h:outputText value="#{searchResult.title}" />
                     </h:outputLink>
                     <h:outputText value="#{searchResult.category}" />
                  </h:panelGrid>
                  <h:outputText value="#{searchResult.kwic}" />
               </h:panelGrid>
            </p:column>
         </p:dataTable>
         <p:graphicImage value="/resources/welcome.gif"
            rendered="#{empty index.lazyModel}" styleClass="welcome" />
      </h:form>

LazyDataModel的load方法:

@Override
   public List<Result> load(int first, int pageSize, String sortField,
         SortOrder sortOrder, Map<String, String> filters) {
      // rowCount
      int dataSize = searchResults.size();
      this.setRowCount(dataSize);
      List<Result> temp = null;
      // paginate
      if (dataSize > pageSize) {
         try {
            temp = searchResults.subList(first, first + pageSize);
         } catch (IndexOutOfBoundsException e) {
            temp = searchResults.subList(first, first
                  + (dataSize % pageSize));
         }
      } else {
         temp = searchResults;
      }
      return searchHandler.classify(temp);
   }
任何想法或建议都将非常感谢。

如果用PrimeFaces的表单更改h:表单,会不会有帮助?

相关内容

最新更新