在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.

+0

如果您希望在每个“获取”页面上刷新它,为什么要使用sessioncoped?为什么? – Kukeltje

+0

因为未来在控制器中会有更多的私人字段,它们在页面重新加载后应该有一些状态:例如,首先,我从表中选择一些数据(选定的行被缓存在控制器的专用字段中),然后点击一些按钮来重新加载页面的非Ajax行为。之后,我有关于所选行数据的详细信息。也许这是错误的,你有更好的主意来实现这一目标? –

+0

设计是错误的。您可以使用会话作用域bean来处理需要更长范围的字段和用于数据的viewscoped bean。你可以在更长范围的bean中注入它。 – Kukeltje

如果你的意思是 “F5”,你可以在添加F preRenderViewEvent:事件代码,并设置init方法为收听?尽管我也不明白为什么你首先使用会话scoped bean,这是有点hacky。

+0

根据评论,我刚才在我以前的文章中写过,我不得不使用你的解决方案。谢谢! –