2

load()方法LazyDataModel被调用,并成功退出。已dataTable呈现,但唯一的问题是整个页面被阻止,按钮没有给出任何响应,除了一个执行 JavaScript 的按钮。

我认为 Ajax 有一些东西,而 AjaxStatus 显示正在加载某些东西,但没有要加载的东西。

我正在使用 PrimeFaces 3.4.2 和 Mojarra 2.1.6

这是我的 .xhtml,在 options.xhtml 中又声明了一个 h:form

<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 的加载方法:

@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);
   }

任何想法或建议将不胜感激。

提前致谢。

4

1 回答 1

0

如果您使用 PrimeFaces 中的表单更改 h:form 是否有帮助?只是一个想法...

于 2013-06-19T08:51:35.330 回答