validation - 绕过 UIInput 组件的 JSF 验证

标签 validation jsf jsf-2

问题在于,JSF 验证不断地将字段翻转回最后一个已知值。

我们正在编辑一个页面,其中支持 bean 已经具有值。 (频率=“每周”)

我们需要显示默认值“please select..”,即使该值不会通过验证(是的,我只是想让用户留在带有错误消息的页面上)。

有什么方法可以让用户选择“Select..”而不将其重置为最后一个好的值?

显然不允许用户保存,但我们希望保留其无效值。

  1. 用户添加新对象,从下拉列表中选择适当的值
  2. 用户保存成功。
  3. 用户点击“编辑”并显示具有已知值的对象(“每周”)
  4. 用户将“每周”更改为“选择”
  5. 用户点击“保存”
  6. 显示了验证消息(很好),但频率返回到最后一个值“每周”(不好,我需要它保持在“请选择..”并让用户手动修复下拉菜单。

immediate="true"不适用于 inputComponents,仅适用于 commandComponents。

最佳答案

我认识到这一点,一年多前我已将此报告为 JSF issue 1299 。由于优先级较低,该问题仍未解决。这并不特定于所有 UIInput组件,但到MenuRenderer负责渲染 HTML <select>元素。所有其他 HTML 输入元素的行为都如您所期望的那样,提交的值将重新显示(好吧,这实际上也没什么)。

由于您已经使用了 JSF 2.0,我建议您在 f:ajax 的帮助下解决这个问题。这样下拉列表就不会被重新渲染,从而保持其选择。

<h:selectOneMenu id="frequency" value="#{bean.frequency}" required="true">
    <f:selectItems value="#{bean.frequencies}" />
    <f:ajax render="frequencyMessage" />
</h:selectOneMenu>
<h:message id="frequencyMessage" for="frequency" />

额外的好处是最终用户可以获得即时反馈,这有利于用户体验。

关于validation - 绕过 UIInput 组件的 JSF 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4434490/

相关文章:

java - 服务层中的验证(Spring Boot)

javascript - 添加动态元素时进行 AngularJS 表单验证

java - 如何在 JSF 中为标准 validator 设置自定义消息?

java - 如何在不渲染页面的情况下使用 Openfaces/JSF 调用方法?

java - JSF - 如何添加 h :graphicImage after f:selectItem element?

jsf-2 - 相同 View 的 session 范围 bean

PHP 复选框验证

c# - 将 DataAnnotations 与 Entity Framework 一起使用

java - 如何使 jsf @ManagedBean 也成为 @WebService

javascript - 使用消息捆绑时,Cufon 字体不适用于通过 JSF EL 表达式生成的链接