【发布时间】:2016-02-26 10:32:36
【问题描述】:
我有 primefaces 的 DataTable 的最简单版本(没有排序、分页等)和负责向 html 页面提供数据的控制器类。 'cars' 是作为值属性传递给 p:datatable 的集合:
<p:dataTable id="dtid" var="car" value="#{someController.cars}" />
@Named
@SessionScoped
public class SomeController {
@Inject
SomeService dataProvider;
private Collection<Car> cars;
@PostConstruct
public void init() {
cars = dataProvider.getCars();
}
public Collection<Car> getCars() {
return cars;
}
我想确保每次我点击网页上的“刷新”按钮时重新加载的汽车集合。 init() 方法仅在第一次加载页面时调用一次。如何以最简单的方式实现这一目标?为了清楚起见:我不想将范围更改为 @RequestScope 或其他任何内容。
提前致谢,
P.
【问题讨论】:
-
如果您希望在每次“获取”页面时刷新它,为什么要对其进行会话处理?为什么?
-
因为将来控制器中会有更多的私有字段在页面重新加载后应该有一些状态:例如首先,我从表中选择一些数据(所选行缓存在控制器的私有字段中),然后单击一些具有非 ajax 行为的按钮,该按钮会重新加载页面。之后,我获得了有关所选行数据的详细信息。可能这是错误的,您有更好的想法来实现这一点?
-
设计错误。您可以将会话范围的 bean 用于需要更长范围的字段,并将视图范围的 bean 用于数据。您可以将其注入到具有更长范围的 bean 中。
-
我试了一下 RequestScoped,它显然工作得很好,但之后我遇到了一个没有解决方法的问题,最后迫使我回到 SessionScoped 并自己控制刷新。无论如何,感谢您的评论,这对我非常有用。
标签: jsf primefaces refresh