2011-06-18 46 views
3

我已經有了鑽嘴魚科2.1.1/3.1的Glassfish上運行的應用程序,它現在已經發展到150,000 行代碼。該應用程序廣泛使用ajax與ViewScoped託管的豆和 頁重定向獲取模式(即faces-redirect = true)。JSF /鑽嘴魚科「閃光範圍」問題

一件令我不斷煩惱的事情是,頁面之間傳遞 參數以及bean到bean(每個頁面都有它自己的支持bean)顯然不容易。

我已經無法獲得閃光燈的工作。我通常需要訪問我寫入下一頁的preRenderView事件偵聽器中的閃存的數據 。這不是 可靠工作,特別是在應用程序重新部署之後。

我已經閱讀過CDI,並花了幾天的時間嘗試從JSF託管的豆 遷移到CDI bean,但無法使其工作。 Seam 3和Glassfish 3.1之間似乎存在很多兼容性問題 。我將Weld升級到了1.1.1,但這沒有幫助。從 我的觀點來看,目前它只是不起作用。當我說不行,比如 我有一個頁面試圖H:inputText的到後端bean一個字符串,這不 工作,很簡單的東西。

因爲我有我不能用縫面@RenderScoped的CDI問題,這在 一個非常簡單的測試應用程序(甚至對於g/F 3.1)我想要做正是,但不是在 複雜的主要應用。

唯一可靠的機制,我能找到目前使用的是URL參數,是一個 安全噩夢。雖然盡一切努力來確保對數據的訪問是 正確驗證總是有ID = 51031或任何瀏覽器是有些吃不消人抵制 試圖缺少的東西,結果看到 ... XHTML?的變化其他IDS。我寫了一個混淆器,以避免明文並做了名稱/值對不 使用有意義的名稱,但這並不能獲取到 問題的根源。

我只是想知道我是否在這裏失去了一些東西,其他人都得到了解決這個問題的工作解決方案,即使在glassfish上?我擔心得太多,應該堅持使用URL params?還有其他建議嗎?

謝謝。

+0

'我一直無法使閃光燈工作。「 - 你能詳細說明嗎? – akira

+0

Mojarra在下一個請求的preRenderView偵聽器中可靠地訪問寫入閃存的值存在問題。大約一年前我登錄了JIRA,他們計劃在Mojarra 2.2中修復它。應用程序重新部署或重新啓動服務器後會發生此問題。似乎有許多使用情況下閃光燈無法可靠地工作。 – Oversteer

回答

3

我看到一樣的。在我試用的時候,Seam3非常麻煩,而且很難將其部署到不同的服務器。我切換到MyFaces CODI,從一開始就沒有任何問題。在你的情況下,你應該看看@ViewAccessScoped。你可以擺脫所有這些惱人的解決方法。

+2

幾個星期前,我切換到CODI ViewAccessScoped,它解決了我所有的問題。在少數情況下,我也在使用會話組。這絕對是一條非常好的建議。我希望一年前能找到這個。爲了不使用CODI的人的利益,請注意,它與Mojarra一起工作良好,並且不需要Myfaces實現。如果您正在使用ManagedBean和javax.faces.bean ....範圍註釋CODI攔截這些,所以只需將依賴項添加到項目中,您就可以切換到CDI而無需更改任何代碼。真棒! – Oversteer

2

聲明它要設置或穿過到下一個視圖在

<f:metadata> 
    <f:viewParam name="foo" value="#{bean.foo}" /> 
</f:metadata> 

此更新模型中基本上bean.setFoo(request.getParameter("foo"))確實值GET請求的相位的參數。

如果您將includeViewParams=true參數添加到導航結果中,則將當前視圖中聲明爲<f:viewParam>的參數傳遞到下一個視圖。

public String doSomething() { 
    // ... 
    return "next?faces-redirect=true&amp;includeViewParams=true"; 
} 

(注:&amp;是很重要的!&將不會工作,因爲它不是XML有效)

下一個視圖應該有相同的<f:viewParam>讓他們在bean中設置。等等。

+0

查看參數是我正在使用的,對不起,我不清楚,閱讀所有的博客,燒傷/ Geary書籍,頁面掉下來。對於像註冊頁面這樣的非持久數據,我可以有13項數據,13 X setPropertyActionListeners + f:viewParam。但只嘗試在同一個jvm中的同一個web容器中傳遞頁面之間的對象引用。通過持久數據傳遞主鍵,創建一個轉換器,在getAsObject()方法中執行EntityManager.getReference()。有一個更好的方法。有沒有可以處理羣集和多個瀏覽器選項卡的會話映射解決方案? – Oversteer

相關問題