在p:dataTable重新加载数据在页面重新加载
问题描述:
我有Primefaces的DataTable(没有排序,分页等)和负责提供数据到html页面的控制器类的最简化版本。 “车”是集合传递给号码:数据表中的值属性:在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.
答
如果你的意思是 “F5”,你可以在添加F preRenderViewEvent:事件代码,并设置init方法为收听?尽管我也不明白为什么你首先使用会话scoped bean,这是有点hacky。
+0
根据评论,我刚才在我以前的文章中写过,我不得不使用你的解决方案。谢谢! –
如果您希望在每个“获取”页面上刷新它,为什么要使用sessioncoped?为什么? – Kukeltje
因为未来在控制器中会有更多的私人字段,它们在页面重新加载后应该有一些状态:例如,首先,我从表中选择一些数据(选定的行被缓存在控制器的专用字段中),然后点击一些按钮来重新加载页面的非Ajax行为。之后,我有关于所选行数据的详细信息。也许这是错误的,你有更好的主意来实现这一目标? –
设计是错误的。您可以使用会话作用域bean来处理需要更长范围的字段和用于数据的viewscoped bean。你可以在更长范围的bean中注入它。 – Kukeltje