使用<h:selectOneMenu>
更改JSF + Seam中区域设置的最常用方法之一:
<h:form action="#{localeSelector.select}" rendered="false">
<h:selectOneMenu value="#{localeSelector.language}" onchange="submit()">
<f:selectItem itemLabel="English" itemValue="en" />
<f:selectItem itemLabel="Francais" itemValue="fr" />
</h:selectOneMenu>
</h:form>
我想用按钮实现区域设置更改。所以,问题是 - 如何传递参数(en,fr等)以使用<h:commandButton>
更新bean?也许<h:inputHidden>
会有帮助吗?
答案 0 :(得分:25)
作为方法参数传递(仅当您的环境支持EL 2.2时),
<h:commandButton value="English" action="#{localeSelector.change('en')}" />
<h:commandButton value="Deutsch" action="#{localeSelector.change('de')}" />
<h:commandButton value="Français" action="#{localeSelector.change('fr')}" />
与
public void change(String language) {
locale = new Locale(language);
// ...
}
或使用<f:setPropertyActionListener>
<h:commandButton value="English" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="en" />
</h:commandButton>
<h:commandButton value="Deutsch" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="de" />
</h:commandButton>
<h:commandButton value="Français" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="fr" />
</h:commandButton>
与
private String language;
public void change() {
locale = new Locale(language);
// ...
}
或使用<f:param>
<h:commandButton value="English" action="#{localeSelector.change}">
<f:param name="language" value="en" />
</h:commandButton>
<h:commandButton value="Deutsch" action="#{localeSelector.change}">
<f:param name="language" value="de" />
</h:commandButton>
<h:commandButton value="Français" action="#{localeSelector.change}">
<f:param name="language" value="fr" />
</h:commandButton>
与
public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
(您也可以让JSF自动设置@ManagedProperty("#{param.language}")
,但这需要bean作为请求作用域,或<f:viewParam>
,另请参阅ViewParam vs @ManagedProperty(value = "#{param.id}"))< / em>的
有足够的方法将参数从视图传递到控制器。随便挑选。 <h:inputHidden>
在JSF上下文中起作用的目的有些不同,它只能由onclick
中的JavaScript操纵,这很丑陋。