为什么我得到null参数值?

时间:2013-10-24 11:53:37

标签: jsf jsf-2 parameters

我的网络应用程序参数有问题。在某些页面(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()托管bean中的

userController方法:

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

    ...
} 

当我运行应用程序并转到index.xhtml页面时,我看到backurl: /pages/login.xhtml 但在setLanguage方法时,当我单击并调试应用程序时,第二个参数(backurl)为空

问题在哪里?

3 个答案:

答案 0 :(得分:1)

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

这应该有效。 (没试过)

有很多方法可以将参数传递给辅助bean。 Here is a useful article

答案 1 :(得分: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");
   }

答案 2 :(得分:0)

您可以将view-param值存储在managed-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
    }

}