Primefaces 5 selectOneMenu更新后change监听器不触发问题求助
Primefaces 5.0对动态加载选项的下拉组件校验逻辑做了调整,当第二个selectOneMenu的选项由第一个下拉动态生成时,若值校验不通过,会直接终止ajax请求流程,不会触发后续的监听器方法,可按以下步骤修复:
- 首先确认
subGroup对应的实体类已经正确重写equals()和hashCode()方法,保证JSF在提交值校验阶段,可以正确匹配前端传回的subGroup值和codeViewController.model.subGroups中的可选选项,避免因判定选项不存在导致校验失败。 - 给第二个selectOneMenu的
p:ajax标签增加process="@this"属性,明确指定本次ajax请求仅处理当前下拉组件的值,不触发表单其他字段的校验,调整后代码如下:
<h:outputLabel for="subGroup" value="Sub Group: *" /> <p:selectOneMenu id="subGroup" label="Sub Group" value="#{codeViewController.model.subGroup}" style="width:100%"> <f:selectItems value="#{codeViewController.model.subGroups}" /> <p:ajax event="change" listener="#{codeViewController.fetchCode}" update="code" process="@this"/> </p:selectOneMenu> <p:message for="subGroup" />
- 若修改后还是无法触发监听器,可以额外增加
immediate="true"属性,让监听器在应用请求值阶段就执行,直接跳过后续的校验流程:
<p:ajax event="change" listener="#{codeViewController.fetchCode}" update="code" process="@this" immediate="true"/>
内容的提问来源于stack exchange,提问作者BHort
相关产品推荐
相关产品推荐

