jsf - ValueChangeEvent 没有得到 newValue
问题描述
我在我的项目中使用 JSF 2.2.13 和 PrimeFaces 6.1.1。并尝试创建更改语言环境的primefaces 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;
}
}
解决方案
您应该按照 Holger 的建议使用event="valueChange"
代替event="itemSelect"
或将其留空。
或如文档所述:
如果没有特定事件,则调用默认事件。除了像“change”这样的标准事件之外,当从下拉列表中选择一个项目时,还可以调用自定义“itemSelect”事件。
默认事件:valueChange
选择发生时,所选值尚未提交,因此侦听器将无法看到新值。
推荐阅读
- python - pygame玩家碰撞错误
- c++ - 让 Visual Studio 使用不同的次要版本工具集?
- aws-glue - 使用适用于 Node.js 或 Ruby on Rails 的 AWS Glue 架构注册表
- python - 如何更改 df.pivot() 中的列级别
- artifactory - Helm 从 Artifactory 获取旧版本
- photoshop-script - Photoshop 动作使每个组中的 1 个随机图层可见 - 好的脚本,但有一个错误
- nginx - Nginx 作为 Web 服务器呈现带有变量的索引 html
- latex - 更改 \citep 中单个特定引用的颜色
- python - 变量的回调?
- python - 将 Sklearn 模型保存为 h5 文件