我有一个数据表:
<h:dataTable binding="#{table}" value="#{chooseKittens.kittenList}">
<h:column>
<p:commandLink value="#{chooseKittens.kittenList[table.rowIndex]}" action="#{chooseKittens.petKitten}"/>
</h:column>
</h:dataTable>dataTable是一系列链接,可将您带到不同的页面。但是,当我转到不同的页面时,我希望保存所单击的命令链接的值,以便可以在后续视图中显示它。有没有办法在没有SessionScope的情况下做到这一点?我查看了t:saveState,但我不确定如何仅保存在Datatable中单击的变量。如果SessionScope是唯一可用的东西,有没有办法在不同的作用域中创建kittenList?(当在数据库中添加新的小猫时,小猫列表应该会更改,因此它应该在RequestScope或ViewScope中)。
发布于 2013-07-03 23:25:14
如果您想在视图之间共享信息,您可以考虑两种通常使用的替代方案。
以GET参数的形式将信息
在本例中,您将使用JSF组件生成一个普通的导航链接,并将一个查询参数附加到该链接,如下所示:
在接收页面中,可通过以下方式获取该参数:
What can and be used for?
Flash可以在重定向视图的信息中找到更多优秀的信息在本例中,您将在命令组件的操作方法中执行重定向,并将使用Flash对象将必要的数据附加到目标视图:
使用
public String next() { //do business job FacesContext.getCurrentInstance().getExternalContext().getFlash().put("kitten",selectedKitten);return "/view-kitten?faces-redirect=true";}
它将通过使用#{flash.kitten}的EL或通过编程使用FacesContext.getCurrentInstance().getExternalContext().getFlash().get("kitten")在目标视图中可用。
可以在JSF2.0 - How to get the values in other jsf page's bean in request scope.中找到扩展的示例
最后要注意的是:不要滥用HTTP session。你不应该用其他地方的信息污染会话。
https://stackoverflow.com/questions/17449754
复制相似问题