2013-10-24 149 views
0

我在我的web應用程序中有參數問題。在某些頁面(的index.xhtml)我有:爲什麼我得到空參數值?

... 
<f:metadata> 
    <f:viewParam name="backurl"/> 
</f:metadata> 

<h:form> 
    <h:outputLabel value="backurl: #{backurl}"/> 
    <h:commandButton image="/resources/graphics/poland.gif" action="#{userController.setLanguage('pl', param['backurl'])}"/> 
</h:form> 

setLanguage()方法userController管理的bean:

public void setLanguage(String language, String backurl) { 
    setLang(new Locale(language)); 

    ... 
} 

當我運行應用程序並進入的index.xhtml頁我看到backurl: /pages/login.xhtml 但在setLanguage方法第二參數(backurl)爲空時,當我點擊並調試應用程序

問題在哪裏?

+0

使用'#{userController.setLanguage( 'PL',backurl)}「',它更簡單,你可以保持你的方法定義。 –

回答

1

你爲什麼不用這個?

<h:commandButton action="#{userController.setLanguage}"> 
    <f:param name="param1" value="value1" /> 
    <f:param name="backurl" value="#{backurl}" /> 
</h:commandButton> 

,然後在你的方法

public String setLanguage() { 

     Map<String,String> params = 
       FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     String param1= params.get("param1"); 
     String backurl= params.get("backurl"); 
    } 
+0

你是對的,謝謝:) – kuba44

+0

@ kuba44 thnx爲編輯:) – Apostolos

1
#{userController.setLanguage('pl', backurl)} 

這應該工作。 (沒測試過)

有很多方法可以將參數傳遞給後臺bean。 Here is a useful article

+0

它沒有工作:( – kuba44

0

可以存儲在託管bean的視圖參數值的方式(提供對引進backurl成員訪問,也可以)。

<f:metadata> 
    <f:viewParam name="backurl" value="#{userController.backurl}" /> 
</f:metadata> 

然後你就可以擺脫對第二種方法的參數,並得到從託管bean中的變量backurl值。

action="#{userController.setLanguage('pl')}"/> 

管理bean應該是這樣的:

public class UserController { 

    private String backurl; 

    public String getBackurl() { return backurl; } 

    public void setBackurl(String backurl) { this.backurl = backurl; } 

    public void setLanguage(String language) { 
     setLocale(new Locale(language)); 
     System.out.println(backurl); //this refers the variable in the managed-bean 
    } 

}