JSF:验证两个字段中提供的值或都不验证其中的值

2024-01-15

我有两个表示数据范围的字段(“从”和“到”)。我需要检查两个字段是否都没有填写,因此只有当一个字段被填写而不是第二个字段时,才会显示验证消息。我怎样才能做到这一点?我偷了这个自定义验证器并将其添加到两个字段(因为 JSF 不验证空字段),但它总是显示它们无效。

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
  String otherControlId = (String) component.getAttributes().get("otherControlId");
  UIInput otherControlInput = (UIInput) context.getViewRoot().findComponent(otherControlId);
  Object otherControlValue = otherControlInput.getValue();
  if ((value == null && otherControlValue != null) || (value != null && otherControlValue == null)) {
 //show message
  }
}

otherControlId 指向第二个控件 ID,我在验证器中获得了一个控件。但 otherControlValue 始终为 null。


组件按照组件树中出现的顺序进行处理。所以如果otherControlInput出现after组件树中当前已验证的组件,则尚未对其进行处理。然后,您需要通过以下方式访问其(未转换且未经验证!)的值:UIInput#getSubmittedValue() http://download.oracle.com/javaee/6/api/javax/faces/component/UIInput.html#getSubmittedValue%28%29代替UIInput#getValue() http://download.oracle.com/javaee/6/api/javax/faces/component/UIOutput.html#getValue%28%29.

Object otherControlValue = otherControlInput.getSubmittedValue();

另一种方法是将验证器放在另一个组件(树中最后出现的组件)而不是当前组件上,然后您可以通过以下方式获取值UIInput#getValue().

一个完全不同的选择是让required属性相互依赖:

<h:inputText binding="#{from}" value="#{bean.from}" required="#{not empty to.submittedValue}" />
<h:inputText binding="#{to}" value="#{bean.to}" required="#{not empty from.value}" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF:验证两个字段中提供的值或都不验证其中的值 的相关文章

  • 从代码访问 WPF 控件验证规则

    XAML
  • 流程验证时 selectManyCheckbox LazyInitializationException

    看来 如果您使用由 hibernate 代理的集合支持的 selectManyCheckbox 您将遇到可怕的 LazyInitializationException 问题 这与支持 bean 的状态无关 调试 Mojarra 2 1 后
  • JSF 不呈现自定义 HTML 标记属性

    我想向我的登录表单添加一些 iOS 特定的标签属性 如果我查看我的网页源代码 就会发现自动更正 自动大写和拼写检查属性不存在 这是什么原因呢 我正在使用 JSF 2 x
  • 是否可以在回发时禁用 f:event type="preRenderView" 侦听器?

    进行回发时是否可以 禁用 触发此操作
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • jQuery 验证 - 只显示一条错误消息

    使用 jQuery 验证插件时 有没有办法只显示抛出的最新错误消息 我认为你应该调查一下groups and errorPlacement的选项validate方法 这应该适合你 jQuery 验证 validate 选项 http doc
  • 从 javascript 访问 JSF 资源

    我想访问 JSF 资源 在WebPages resources img 来自 JavaScript 函数 例如 function hideSpinner arguments i poster img sppiner png 我努力了argu
  • 检测 JTextField“取消选择”事件

    有没有某种方法可以检测 JTextField 是否被取消选择 即该字段已被选择 但现在您选择了其他内容 我想要这样做的原因是因为我想在用户尝试提交数据之前检查用户表单中是否有任何非法字符 如果有一些更简单的方法来做到这一点 而不是我试图解决
  • 如何在 中继器中查找控件

    我有这个源代码 div div
  • 使用条件渲染时,未在请求作用域 bean 中处理输入值

    我知道此类问题已在这里被问过数百万次 但我在相关帖子中找不到我的问题的解决方案 JSF 1 2 我有一个请求范围的 bean 其方法用作 valueChangeListener class DoStuff public void step1
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何使用 C# 在 MS Excel 单元格中添加数字验证

    我的目标是限制用户在 MS Excel 单元格中仅输入 1 到 100 范围内的值 我正在以编程方式生成 Excel 文件 但是当我添加上述验证时 抛出异常Exception from HRESULT 0x800A03EC 我写的代码如下
  • JSF 2.x @EJB 依赖注入错误

    因此 正如编程中通常发生的那样 我提出了一个问题 而一个潜在的解决方案又引发了更多问题 和错误 我刚开始使用 servlet JSF 和 EJB 并且遇到了依赖注入错误 这是我原来的问题 JSF h 标签不显示 https stackove
  • 验证错误值无效[重复]

    这个问题在这里已经有答案了 我知道这是一个常见的错误 并且有很多关于它的问题 但我必须创建一个新的问题 这是我的 jsf 页面
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • Rails:验证字符串的最小和最大长度,但允许其为空白

    我有一个想要验证的字段 我希望该字段能够留空 但如果用户输入数据 我希望它采用某种格式 目前我在模型中使用以下验证 但这不允许用户将其留空 validates length of foo maximum gt 5 validates len
  • Appengine - 隐藏文件夹的部署

    为了验证 SSL 证书 我需要将包含一些文件的隐藏文件夹 well known 上传到我的应用程序 我正在使用 eclipse 部署 java 应用程序 但 appengine 上的应用程序未收到这些文件 我猜他们被过滤掉了 我尝试将隐藏文
  • Laravel 验证:存在附加列条件 - 自定义验证规则

    在 Laravel 中指定存在验证规则时 是否有一种方法可以引用另一个字段 我希望能够说输入 a 必须存在于表 a 中 输入 b 必须存在于表 b 中 并且表 b 中列 x 的值必须等于输入 a 最好通过例子来解释 public rules
  • 列表中允许 div 吗? [复制]

    这个问题在这里已经有答案了 我知道DIV inside LI是不允许的 但我最近在许多 大 网站上看到了它 例如粉碎杂志 网页设计师墙 etc 我尝试验证网站 但它们有错误 但没有任何信息DIV in LI 那么我可以在里面使用它吗LI 我
  • 访问自定义表单控件的有效值

    我创建了代表密码表单控件的自定义组件 下面的代码已简化 密码组件 html

随机推荐