jsf - 为什么 h:selectOneMenu onchange 被触发了两次,为什么 valueChangeListener 在没有 onchange 的情况下不会被触发?
问题描述
这是我在stackoverflow上的第一篇文章,我希望我做得对
几周以来我一直在使用 JSF 和 Xnet(可能是 2 或 3 周),我有两个关于 h:selectOneMenu 的问题。
第一个问题:onchange 事件被调用了两次。第一次是当我点击打开下拉列表时,第二次是当我选择一个选项时。我发现它是第一次被调用的,因为当我打开下拉列表时,选定的值发生了变化,它选择了列表中的第一个值。这是正常行为吗?
第二个问题:如果我没有设置 onchange,则不会调用 valueChangeListener ...再次,这是正常行为吗?
我不确切知道我在哪个 JSF 版本上工作,但我知道它在 2 之前(类似于 1.X.... 这不是我的错,我发誓,这是我公司的错)这是代码,我不知道'不知道它是否可以帮助......代码不是我的,我正在纠正一个错误。
这是我的 jsp 上的 h:selectOneMenu
<h:panelGrid columns="2">
<h:selectOneMenu id="id_label" value="#{parentBean.bean.rapportId}"
immediate="true" onchange="this.form.submit();" valueChangeListener="#{parentBean.refreshDisplay}">
<f:selectItems id="list_label" value="#{parentBean.labelList}" />
</h:selectOneMenu>
</h:panelGrid>
这是bean中的valueChangeListener调用的方法
public String refreshDisplay(ValueChangeEvent event) {
Integer id = (Integer) event.getNewValue();
ObjectA process = (ObjectA) ObjectA.getInstance();
try {
BeanA rBean = (BeanA) process.findById(BeanA.class, new Object[] { id });
setBean(rBean);
} catch (MyException e) {
e.printStackTrace();
log.error(e, e);
}
return "";
}
我是JSF的初学者,所以有很多东西我不太了解,这就是为什么我不知道这是否正常。
解决方案
推荐阅读
- javascript - 科普特类型日历组件 React Native
- docker - 为什么执行 Golang 可执行文件的 docker 容器在启动后立即挂起?
- css - 表有边距,但到处都是 0
- r - 使用 dplyr 加入不正确的数据
- kotlin - 尝试在 while 循环中添加 0.1 最终会添加大约 0.1
- python - Discord.py、bot.event 有效,但 bot.command 无效
- keycloak - 如何更改通过 Keycloak 令牌交换创建的访问令牌的内容
- c++ - VSCode - 调试 C++ 时无法将输入输入控制台
- amazon-web-services - aws emr s3-dist-cp MapReduce 作业在 CopyFilesReducer.cleanup 上失败
- swift - 选择一个 CoreData 对象并将其作为绑定传递