控件不存在';t进入Primefaces LazyDataModel加载方法
在添加lazy属性之前,我能够看到datatable中的数据。在添加了lazy属性之后,datatable是空的,因为我的调试点从未达到过,它位于LazyDataModel的load方法中。换句话说,如果不调用load方法,我将在我的搜索()中看到该控件。searchResults 我只是从web服务中得到结果(它工作得很好),我已经查看了大多数链接和。我确保设置了lazy属性和setRowCount。也许有人能帮我解决这个问题。我使用的是PrimeFaces6.0、CDI、JSF2.2和Deltaspike 1.7.2 这是我的JSF控件不存在';t进入Primefaces LazyDataModel加载方法,primefaces,datatable,lazydatamodel,Primefaces,Datatable,Lazydatamodel,在添加lazy属性之前,我能够看到datatable中的数据。在添加了lazy属性之后,datatable是空的,因为我的调试点从未达到过,它位于LazyDataModel的load方法中。换句话说,如果不调用load方法,我将在我的搜索()中看到该控件。searchResults 我只是从web服务中得到结果(它工作得很好),我已经查看了大多数链接和。我确保设置了lazy属性和setRowCount。也许有人能帮我解决这个问题。我使用的是PrimeFaces6.0、CDI、JSF2.2和Del
// 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);
}
...
}
@Named(“搜索”)
@有状态
@GroupedConversationScoped
@会话组(SearchGrp.class)
公共类ReSearchController扩展BaseWebServiceSearchController
执行ReGrp,ReSearchControllerLocal{
@注入
私人分组会话;
@注入
私有窗口上下文窗口上下文;
私人LazyDataModel搜索结果;
...
@施工后
@凌驾
公共void init(){
//用于初始化我的web服务的代码
搜索();
}
@凌驾
公共字符串搜索(){
this.searchResults=new LazyDataModel(){
私有静态最终长SerialVersionId=416836387090358956L;
@凌驾
公共列表加载(int first,int pageSize,String sortField,SortOrder SortOrder,
地图过滤器){
列表结果列表=空;
resultsList=搜索(第一,页面大小);
//行数
setRowCount(getResultCount());
//我不需要对oor过滤器进行排序,因为os没有使用它们
返回结果列表;
}
};
setRowCount(getResultCount());
返回“/cr research.xhtml?faces redirect=true”;
}
@凌驾
公共ArrayList搜索(int-first,int-pageSize){
//这是我的webservice调用,如果我独立调用,它可以正常工作
//条件获取表单输入
返回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" />
首先,要找到根本原因,请删除以下内容:@Stateful@GroupedConversationScoped@ConversationGroup(SearchGrp.class)
,因为您没有使用ajax,所以请使用@SessionScoped。您的search()将重定向到(其他?)页面。奇怪的构造。。。简化并查看它是否有效(在PrimeFaces showcase中是这样)@Kukeltje我需要所有这些,这是从seam迁移的一部分,我们仍然希望保留EJB并使用它,我们正在用deltaspike对话替换seam对话,但我仍然会尝试删除它们并尝试一下。我的搜索返回到同一个页面,这是我必须删除的冗余内容。那么为什么不使用ajax来更新datatable呢?我已经编辑了代码来尝试ajax,但是控件仍然没有进入load方法。