我们的网络应用程序的模块在中间显示一个数据表,在右侧显示所选记录的详细信息。每次用户选择主表的记录时,我们都会更新详细信息页面并显示所选记录的详细信息。现在我们遇到了以下问题:
- 用户在主表中选择一条记录,数据将显示在详细信息区域中。
- 用户修改详细数据并点击保存。
- 发生验证(bean 验证)错误,用户将看到错误消息。
- 用户没有更正错误的输入,而是选择主表的另一条记录。
- 所有没有错误状态的字段都将使用新记录的数据进行更新。之前错误的字段显示的是旧数据。旧记录的数据将保留,直到用户刷新页面。
有什么办法可以解决这个问题吗?我在 Primefaces 扩展中看到了 pe:resetInput 组件,但该组件需要 UICommand 组件才能工作。我需要一个在用户选择主表的另一个条目时有效的解决方案。
最佳答案
您可以使用ResetInputAjaxActionListener
的OmniFaces为了这。除了注册为<f:actionListener>
,也可以全局注册为 PhaseListener
.
另请参阅:
-
ResetInputAjaxActionListener
showcase example -
ResetInputAjaxActionListener
API documentation -
ResetInputAjaxActionListener
source code
如果您打算将其掌握在自己手中,那么您基本上需要自己编写代码,该代码基本上执行以下操作:
- 在调用操作阶段,获取要渲染的
UIInput
未由ajax请求执行/处理的组件。 - 调用
resetValue()
方法。
另请参阅:
关于validation - JSF2 BeanValidation 失败后重置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510758/