簡體   English   中英

JSF:將選定的變量值保存在數據表中以供下一個視圖使用

[英]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中)。

如果要在視圖之間共享信息,可以考慮兩種常用的替代方法。

  1. 將信息作為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>中使用什么?

  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM