2013-10-24 153 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 
    } 

}