PrimeFaces跨表单更新formUsuario的callef输入框失效问题排查
问题根因
你遇到的不生效问题主要来自以下几个核心配置遗漏:
- 对话框
close事件的p:ajax默认不会提交对话框内的表单数据,触发verificarDatosFacturacion方法时,后台拿到的psNomVialidad还是旧值,赋值自然不生效 - 对话框内的CLOSE按钮仅执行了前端关闭逻辑,没有提交表单内的输入值到后台,也没有触发数据同步逻辑
- 输入框
calle的change事件p:ajax未显式指定提交规则,且如果目标组件callef所在的DomFacturacion面板rendered属性为false时,目标组件不存在于DOM树中,更新会直接失效 - 需确认视图作用域注解是否导包正确,若作用域失效会导致每次请求属性值重置
修复方案
替换对话框关闭逻辑,移除无效的close事件监听
删除<p:dialog>标签上的<p:ajax event="close" .../>配置,将数据同步逻辑绑定到CLOSE按钮上,修改CLOSE按钮代码如下:<p:commandButton styleClass="btnAzul" value="CLOSE" action="#{migracionController.verificarDatosFacturacion}" process="dlgFormVerif" update=":formUsuario:DomFacturacion" oncomplete="PF('dlgVerif').hide();"/>配置说明:
process="dlgFormVerif"会提交整个对话框表单内的所有输入值,把最新的psNomVialidad同步到后台- 先执行
verificarDatosFacturacion完成属性赋值,再更新目标区域DomFacturacion,最后关闭对话框
修复输入框change事件的更新配置
修改calle输入框的p:ajax配置如下:<p:ajax event="change" process="@this" update=":formUsuario:DomFacturacion" partialSubmit="true"/>配置说明:
- 直接更新父容器
DomFacturacion而非单个callef,避免callef因rendered条件不满足导致更新失效 process="@this"会提交当前输入框的最新值到后台,partialSubmit="true"减少不必要的参数提交
- 直接更新父容器
额外校验项
确认MigracionController的@ViewScoped注解导包正确,和@ManagedBean配套的正确包路径为javax.faces.bean.ViewScoped,如果导为CDI的javax.faces.view.ViewScoped会导致作用域失效,属性值在请求后重置。
内容的提问来源于stack exchange,提问作者Cristian Piste
相关产品推荐
相关产品推荐

