![](/img/trans.png)
[英]JSF PrimeFaces - Save value of selected tablecell on buttonclick
[英]JSF: Save selected variable value in datatable for next view
我有一個數據表:
<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中)。
如果要在視圖之間共享信息,可以考慮兩種常用的替代方法。
將信息作為GET參數傳遞給下一個視圖
在這種情況下,您將使用生成普通導航鏈接的JSF組件並將查詢參數附加到該鏈接,如:
<h:link value="Next page" outcome="/view-kitten"> <f:param name="id" value="#{kitten.id}"/> </h:link>
在接收頁面中,參數可通過以下方式獲得:
<f:metadata> <f:viewParam name="id" value="#{kittenBean.id}/> </f:metadata>
更多優秀的信息可以在<f:metadata>
和<f:viewParam>
中使用什么?
使用Flash
將信息傳遞到重定向的視圖
在這種情況下,您在命令組件的操作方法中執行重定向,並使用Flash
對象將必要的數據附加到目標視圖:
<h:commandButton value="Next page" action="#{bean.next}"/>
同
public String next() { //do business job FacesContext.getCurrentInstance().getExternalContext().getFlash().put("kitten", selectedKitten); return "/view-kitten?faces-redirect=true"; }
它將在目標視圖中通過EL使用#{flash.kitten}
或以編程方式使用FacesContext.getCurrentInstance().getExternalContext().getFlash().get("kitten")
。
可以在JSF2.0中找到擴展示例- 如何在請求范圍內獲取其他jsf頁面的bean中的值 。
最后要注意的是: 不要濫用HTTP會話 。 您不應該使用其他地方的信息污染會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.