2009-12-15 79 views
0

我會盡力解釋我的問題。我在非常非常嚴格的環境(公司層和嚴格的約束 - 不要添加庫等)中使用IBM的JSF 1.2實現。JSF - 創建一個通用確認頁面(動態導航)

我想創建一個簡單的頁面進行確認,可以重複使用(通用類型)。 例如: 1-page1.jsp>點擊按鈕 2-pageConfirmation.jsp> 2按鈕是或否 3單擊否>返回/ 3單擊是>轉到someAction然後轉到第2頁。 jsp

所以我想在會議中存儲我需要的東西,我來自哪裏,我想去的地方。但問題在於:我如何調用我想要的操作?這個名字是動態的。假設我在控制器中點擊「是」後,我想從存儲在會話中的名稱中調用「myMethodAction」。我考慮過使用表達式語言api來評估它,但是我被阻止,因爲我無法訪問ELContext,並且不允許使用el包(el-api.jar)。

總結一下,點擊後,我試圖調用一個動作/方法,然後重定向到一個頁面,而不是調用一個頁面。

有沒有人有一些神奇的想法?還是我完全錯了?

在此先感謝。

回答

1

您可以創建一個完全獨立的託管bean ConfirmationBean並將其放入請求範圍。您可以在每個managed property injection工廠下的「父」bean中訪問它,或者自己創建它並將其放入請求映射中。

如果你想將它與很多其他豆相關聯,第一種方法需要在faces-config.xml很多工作,所以我不認爲這是非常有吸引力的。

第二種方式只需要一點(可重複使用)的代碼在操作方法。我舉一個例子:

public String submit() { 
    ConfirmationBean conformationBean = new ConfirmationBean(); 
    confirmationBean.setOutcome("outcome"); // Set navigation case outcome where it should return back. 
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("confirmationBean", confirmationBean); 
    return "confirm"; 
} 

confirm.jsf應該有一個隱藏字段,例如在「結果」

​​3210

ConfirmationBean的操作方法應該是這樣的:

public String submit() { 
    if (confirm) { 
     return outcome; 
    } else { 
     return "confirm"; 
    } 
} 

,或者如果你是三元運營商的粉絲;)

public String submit() { 
    return confirm ? outcome : "confirm"; 
} 
+0

嘿,謝謝你的反應!我正在嘗試使用它,我會讓你保持最新狀態。 – Baztoune 2009-12-16 08:07:26

+0

因此,您的解決方案非常好,除非我想調用某個操作而不是重定向到「結果」頁面。例如,我想調用myController.deleteTheItem(),在做了一些事情之後,它會重定向到刷新列表。我會發布我發現的內容。 感謝您的幫助。順便說一句,你的網站是一個很有用的信息來源;) – Baztoune 2009-12-16 09:27:26

+0

然後就在'return'語句之前這樣做。 – BalusC 2009-12-16 11:05:52

0

解決方法二: - 呼叫(存儲在confirmationBean會話字符串)的作用invoking EL這樣的解決方案

這可能是這對一些人來說很有用,但由於我不允許導入庫(el-api)而無法使用。