Элемент управления не входит в метод загрузки Primefaces LazyDataModel
Я смог увидеть данные в datatable перед добавлением атрибута lazy. После того, как я добавил ленивый атрибут, таблица данных пуста, потому что мои точки отладки никогда не были достигнуты, которые находятся внутри метода загрузки LazyDataModel. Другими словами, метод загрузки не вызывается, я вижу элемент управления до this.searchResults в моем поиске ()
Я просто получаю свои результаты от веб-сервисов (которые работают просто отлично). Я просмотрел большинство ссылок здесь и здесь. Я удостоверился, что ленивый атрибут и 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:ajax внутри p:dataTable
<p:ajax event="page" listener="#{search.search}" update=":mainform:searchResultTable" />