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) 为空

问题出在哪里?

4

3 回答 3

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

这应该有效。(没有测试)

有很多方法可以将参数传递给支持 bean。这是一篇有用的文章

于 2013-10-24T11:56:37.043 回答
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");
   }
于 2013-10-24T11:57:57.613 回答
0

您可以将 view-param 值存储在托管 bean 中(backurl也为引入的成员提供访问器)。

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

然后您可以摆脱第二个方法参数并backurl从托管bean中的变量中获取值。

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
    }

}
于 2013-10-24T12:06:27.647 回答