Ser*_*rga 11 jsf seam parameter-passing jsf-2
在JSF + Seam中更改语言环境的最常用方法之一 - 使用<h:selectOneMenu>:
<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>
Run Code Online (Sandbox Code Playgroud)
我想用按钮实现区域设置更改.所以,问题是 - 如何传递参数(en,fr等)来更新bean <h:commandButton>?也许<h:inputHidden>会有所帮助?
Bal*_*usC 26
要么作为方法参数传递(仅当您的环境支持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')}" />
Run Code Online (Sandbox Code Playgroud)
同
public void change(String language) {
locale = new Locale(language);
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者使用 <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>
Run Code Online (Sandbox Code Playgroud)
同
private String language;
public void change() {
locale = new Locale(language);
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者使用 <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>
Run Code Online (Sandbox Code Playgroud)
同
public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
Run Code Online (Sandbox Code Playgroud)
(你也可以让JSF自动设置它@ManagedProperty("#{param.language}"),但是这需要bean作为请求作用域,或者a <f:viewParam>,另见ViewParam vs @ManagedProperty(value ="#{param.id}"))
有足够的方法将参数从视图传递到控制器.随便挑选.的<h:inputHidden>在JSF上下文供应稍微不同的目的,它只能由JavaScript在操纵onclick这是难看.
| 归档时间: |
|
| 查看次数: |
32198 次 |
| 最近记录: |