java – Primefaces数据表分页无法正常工作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Primefaces数据表分页无法正常工作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3921字,纯文字阅读大概需要6分钟。
内容图文
我有一个使用JSF2.0,Spring3和Hibernate4的应用程序.
我在Primefaces 3.4.2数据表中显示值,问题是当我单击分页时,数据表行始终保留在前10条记录中.它不会显示接下来的10条记录.
我的数据表代码
<h:form>
<p:dataTable id="dataTable" var="req" value="#{reqMB.myList}"
paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15">
<f:facet name="header">
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="XXX" />
</f:facet>
<h:outputText value="#{req.bbbb}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="XXXXS" />
</f:facet>
<h:outputText value="#{req.kkjj}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="XXXXXOO" />
</f:facet>
<h:outputText value="#{req.nnnn}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="XXXXKK" />
</f:facet>
<h:outputText value="#{req.kkkk}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="XKKKK" />
</f:facet>
<h:outputText value="#{req.pppp}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="LLLL" />
</f:facet>
<h:outputText value="#{req.llll}" />
</p:column>
</p:dataTable>
</h:form>
ManagedBean
@Named("reqMB")
@Scope("request")
public class MyBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
MyService myService;
List<MyClass> myList;
public List<MyClass> getMyList() {
try {
myList= new ArrayList<MyClass>();
myList.addAll(getMyService().getMymethod());
} catch (Exception e) {
e.printStackTrace();
}
return myList;
}
我该如何解决这个问题?
更新1
我注意到,当我显示少数记录分页工作正常,但当我显示超过1300的记录时,分页不起作用.
解决方法:
我刚尝试了30000条记录,它运行正常.值得注意的一件事是,getMyList方法被多次调用(在我的情况下为渲染响应阶段为6),并且每次调用它都是bean获取/生成一个全新的列表,这可能是导致问题(虽然我试图在我的getter方法中生成一个新列表,但它工作正常).
一般来说,建议不要在那里放置任何与业务逻辑相关的代码.相反,在许多情况下,最好在@PostConstruct方法或其他地方填充列表.请参阅BalusC制作的帖子,它可能会有所帮助.
Why JSF calls getters multiple times
你也可以阅读这个延迟加载
Efficient JSF Pagination
以下是我的测试代码:
<h:body>
<h:form>
<p:dataTable id="dataTable" var="car" value="#{tableBean.cars}"
paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15">
<f:facet name="header">
Ajax Pagination
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Model" />
</f:facet>
<h:outputText value="#{car.model}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Manufacturer" />
</f:facet>
<h:outputText value="#{car.manufacturer}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Other Information" />
</f:facet>
<h:outputText value="#{car.otherInformation}" />
</p:column>
</p:dataTable>
</h:form>
<ui:debug hotkey="x"/>
</h:body>
这是支持bean:
@ManagedBean
@RequestScoped
public class TableBean implements Serializable {
private List<Car> cars;
@PostConstruct
public void init() {
System.out.println("A new backing bean has been created");
cars = new ArrayList<Car>();
populateRandomCars(cars, 300000);
}
private void populateRandomCars(List<Car> list, int size) {
for (int i = 0; i < size; i++) {
list.add(new Car(i, i, UUID.randomUUID().toString()));
}
}
public List<Car> getCars() {
//If i populate the list here I can still get the correct result.
// cars = new ArrayList<Car>();
// populateRandomCars(cars, 30000);
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
}
最后是模型类:
public class Car {
private int manufacturer;
private int model;
private String otherInformation;
public Car(int manufacturer, int model, String otherInformation){
this.manufacturer = manufacturer;
this.model = model;
this.otherInformation = otherInformation;
}
//Getters and Setters
}
内容总结
以上是互联网集市为您收集整理的java – Primefaces数据表分页无法正常工作全部内容,希望文章能够帮你解决java – Primefaces数据表分页无法正常工作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。