2013-01-07 80 views
1

試圖從網頁A到B.頁面導航在使用configurableNavigationHandler像下面ConfigurableNavigationHandler參數問題

public void navigate(String outcome) { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler) fc 
      .getApplication().getNavigationHandler(); 
    nav.performNavigation(outcome+"?faces-redirect=true&includeViewParams=true&oldPage=hello"); 
} 

在網頁B時,我點擊回到它來獲取參數值並導航到網頁B傳遞參數將用戶導航到相應的頁面。但在檢索請求參數時獲取空值。

public String navigateToOldPage() { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    String oldPage = fc.getExternalContext().getRequestParameterMap().get("oldPage"); 
    return oldPage;  
} 

任何人都可以請建議我嗎?

回答

0

你基本上試圖訪問錯誤的HTTP請求中的oldPage參數,即在頁面B中提交的表單之一,而不是顯示頁面B本身的表單。

基本上有2種選擇:

  1. 設置使用<f:viewParam>頁B的顯示過程中的請求參數作爲bean屬性:

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

    與(在@ViewScoped豆)

    public String navigateToOldPage() { 
        return oldPage; 
    } 
    

  2. 保留在UICommand組件負責形式請求參數提交使用<f:param>

    <h:commandButton ... action="#{bean.navigateToOldPage}"> 
        <f:param name="oldPage" value="#{param.oldPage}" /> 
    </h:commandButton> 
    

    或者,如果它只是需要一個真正的GET請求,然後使用<h:button>(或<h:link>

    <h:button ... outcome="#{param.oldPage}" /> 
    
+0

非常感謝和抱歉的延遲響應。我試圖以通用的方式進行導航。我只寫了一個控制器類(一個普通的java類),並放置了兩個方法navigate和navigateToOldP在所有的bean中,我將調用這個導航方法,如下面的UIController.navigate(「PageName」)。在這個導航方法中,從facesContext獲取viewId並添加爲請求參數。這需要後退按鈕的功能。請告訴我是否有任何問題? –

+0

是的,我知道你正在嘗試類似的東西。答案是否有用? – BalusC

+0

非常感謝BalusC,並對延遲響應感到抱歉。答案部分有幫助 –