- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个使用 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>
受管Bean
@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 数据表分页不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937398/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!