2011-09-19 27 views
1

我有以下掩模/視圖:貯藏的inputText值時,「跳躍」從一個控制器到另一個

input mask

輸入名稱和描述後,我可以通過點擊添加現有的屬性的列表「添加現有的」按鈕。 這將打開另一個掩碼/視圖,我可以從現有的屬性列表中進行選擇。這個(新)掩碼/視圖也有它自己的控制器和模型。

當我完成選擇,我有另一個按鈕,讓我回到這個面具。

問題是,當我回來時,名稱和說明字段爲空。 發生這種情況是因爲當我單擊「添加現有按鈕」時,此掩碼的控制器/模型未被調用並且值不存儲。

如何避免這種情況並保存值?

感謝您的幫助 弗朗西斯

+0

JSF 1.x or 2.x?組件庫? – BalusC

+0

JSF 2.0和標準/核心組件 – Francesco

回答

1

這隻有在新的觀點是相同的觀點裏面工作。例如。當它是由隱藏的<div>呈現的疊加對話框而不是普通的window.open()彈出窗口時。通過這種方式,bean將可以訪問對方,並且您將能夠執行ajax更新,而不是提交/刷新整個頁面。

如果你不熟悉HTML/CSS/JS,那麼這對於家長來說相當複雜。我建議查看一個組件庫,它提供瞭如RichFaces' <rich:popupPanel>PrimeFaces' <p:dialog>這樣的組件。

+0

謝謝BalusC的回答。你怎麼看待這個問題:我雖然可以在申請申請階段進行重定向。當我點擊「添加現有」按鈕時,我設置了一個標誌並使頁面重新加載,以便值存儲在模型中。在監聽器中,我收到了申請請求階段,然後檢查該標誌並執行重定向。你認爲它會起作用嗎? (請記住,我對JSF相當陌生,所以如果我告訴bull @@ it,原諒我吧)) - – Francesco

+0

類似這樣的:'public void afterPhase(PhaseEvent event) { System.out.println(「階段 - >「+ event.getPhaseId()); ExternalContext ctx = FacesContext.getCurrentInstance()。getExternalContext(); 如果( 「createRedirect」 .equalsIgnoreCase(ctx.getRequestParameterMap()獲得( 「模式」))){ 嘗試 { ctx.redirect( 「businessObjectAttributeSpecificationListView.xhtml」); } catch(IOException e) { e.printStackTrace(); } } }' – Francesco

+0

確實有類似你提出的方法,但這很笨拙。我真的推薦覆蓋div。然後,將bean作爲託管屬性相互連線,而不用調用請求參數甚至會話範圍,並記住已經輸入的數據,就容易多了。 – BalusC

0

您可以將數據存儲在會話或會話bean中。 當用戶在多個選項卡/窗口中工作時,會話Bean方法有巨大的缺點 - 他只使用一個會話bean,因此他會覆蓋他在其他窗口中所做的操作。

對話作用域bean解決了這個問題。但是會話範圍不在javaEE 5中,它在CDI中(EE6的一部分)。

相關問題