我的网络应用程序参数有问题。在某些页面(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
)为空
问题在哪里?
答案 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
}
}