2013-05-29 28 views
2

背景:如何具有ViewScoped豆視圖之間發送數據

  • 我有一個ViewScoped豆與命名someId
  • 我有一個頁面,somePage.xhtmlinputTextcommandLink
  • 領域inputText的值在bean中有一個相應的字段searchValue
  • 當我單擊鏈接時,bean中的一個方法重定向到另一個頁面,名爲searchResult.xhtml使用相同的bean作爲somePage(雖然不是要求)

渲染searchResult豆需要執行數據庫搜索的基礎上,inputText和變量someId的前值。之後,結果將顯示在searchResult中。

是否有可能做到這一點沒有:

  • 使用SessionScoped豆,或
  • 有一個h:link,而不是commandLink的,讓f:param「代表someIdinputText的值s得到由更新阿賈克斯

我也試過Flash,但它似乎不可用preRenderView

+0

我會在你的情況下使用'#{flash}'。它倖存下來,你最有可能做的重定向。展示你的工作方式,我們會糾正你的錯誤,在那裏。 – skuntsel

回答

2

當您從頁面到searchResult.xhtml查看導航範圍內管理bean被重建,因爲視圖範圍的bean仍然活着,直到導航是讓你的問題應該解決如下:

1,創建另一個託管bean在searchResult.xhtml頁面的作用域中定義一個變量some​​Id,並使用set和get方法

2-在您的命令鏈接(在您的第一個bean中)定義一個操作方法以將someId的值保存在閃存範圍中然後使用重定向導航到searchResult.xhtml

public String navigatetosearch() { 
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put("someId", someId); 
    return "/pages/searchResult?faces-redirect=true"; 
} 

3在GET方法的第二個bean從閃存恢復​​變量:

public SomeId getSomeId() { 
    if (SomeId == null) { 
     SomeId = getFlash().get("SomeId"); 
    } 
    return SomeId; 
} 

,然後你可以在PreRenderView或任何地方的方法使用這個變量。

+0

似乎我犯了閃光燈的錯誤;我試圖在'searchResult'頁面中的'viewParam'中使用它,它不起作用。儘管如此,在豆中獲得它。謝謝 – nivis