我在项目中使用JSF 2.2.13和PrimeFaces 6.1.1。并尝试创建素面selectOneMenu 会更改语言环境。但是,当触发valueChangeListener时-ValueChangeEvent始终为null newValue。
这是我的selectOneMenu:
<p:selectOneMenu value="#{localeBean.localeCode}" id="lang" valueChangeListener="#{localeBean.valueChangeListener}">
<f:selectItem itemValue="pl" itemLabel="${msg['page.login.language.pl.label']}"/>
<f:selectItem itemValue="en" itemLabel="${msg['page.login.language.en.label']}"/>
<p:ajax event="itemSelect" update="@this"/>
</p:selectOneMenu>
还有我的LocaleBean:
@Named
@SessionScoped
public class LocaleBean implements ILocaleBean, Serializable {
private String localeCode;
private Locale locale;
private boolean initiated = false;
private static final Log log = LogFactory.getLog(LocaleBean.class);
@PostConstruct
public void init() {
setDefaultLocale();
this.localeCode = locale.getLanguage();
initiated = true;
}
public void setLocaleCode(String localeCode) {
this.localeCode = localeCode;
}
public String getLocaleCode() {
if (!initiated) {
init();
}
return getLocale().toString();
}
public void valueChangeListener(ValueChangeEvent event) {
setLocaleFromString(event.getNewValue().toString());
}
@Override
public Locale getLocale() {
return locale;
}
}
答案 0 :(得分:0)
您应该使用event="valueChange"
而不是event="itemSelect"
,或者按照Holger的建议将其留空。
或者如文档所述:
如果没有特定事件,则调用默认事件。此外 标准事件(例如“更改”,自定义“ itemSelect”事件)也是 从下拉菜单中选择一项时可以调用。
默认事件:valueChange
发生选择时,所选值尚未提交,因此侦听器将无法看到新值。