【问题标题】:Any drawbacks using this input validation method in JavaFX?在 JavaFX 中使用这种输入验证方法有什么缺点吗?
【发布时间】:2015-12-17 09:04:31
【问题描述】:

由于在 JavaFX 中似乎没有用于输入验证的方法,因此我正在考虑如何在我当前的项目中以一种干净的方式进行验证。

这是我的想法:

  1. 所有验证规则都是正则表达式(如“min-length”、“not-empty”、“only-numbers”等),它们存储在 .properties 文件中 示例:validationrules_only_numbers="[0-9]+"
  2. 我在 .fxml 文件中使用此验证,方法是为任何应验证的输入定义 <properties> 标记 例子: <ChoiceBox><properties rules="%validationrules_only_numbers"/></ChoiceBox>
  3. 在一个抽象/父控制器中,我编写了一个方法,该方法获取当前 AnchorPane 的所有子级并对其进行迭代(假设在用户单击“确定”提交表单后)。所有具有验证规则的子项都将传递给另一个方法,该方法根据输入字段的类型将验证规则应用于输入。
  4. 所有存在验证错误的控件都会突出显示。

我个人喜欢这个想法的地方:

  • 只需将验证规则添加到 .properties 文件即可轻松扩展它们
  • 在 .fxml 文件中分配规则
  • 所有控制器(扩展抽象/父控制器)不需要执行任何验证任务

我不喜欢/不确定它在现实中是否有效:

  • 验证规则都是正则表达式,我不知道这是否适用于所有输入字段(但我不介意编写“hacks”来使其工作,因为我只会做一次父控制器)
  • 我必须检查带有 instanceof 的控件,才能为该特定控件正确应用规则,因为并非所有控件都有 getText() 方法,并且需要以其他方式验证输入
  • 不知道是否有更好的方法将规则放入 .fxml 文件然后使用<properties>

你的想法是什么?我在这里遗漏了什么重要的东西吗?

我在谷歌上搜索了几天关于这个主题,似乎没有像我们熟悉的网络开发社区那样真正好的解决方案。

【问题讨论】:

  • 顺便说一句,您能否提供代码示例或指向此类的链接,以说明如何从Node 获取此<properties>?我似乎找不到任何关于它的文档,而且看起来很有趣!
  • @sillyfly 假设你有一个像我上面的例子一样的选择框,然后你可以做ObservableMap<Object, Object> controlProperties = choiceBox.getProperties(); 然后String rules = (String) controlProperties.get("rules");
  • 谢谢。现在我们只需要将其添加到 Scene Builder:bugs.openjdk.java.net/browse/JDK-8090540

标签: validation javafx


【解决方案1】:

在重新发明轮子之前,您可能想看看 ControlsFX 包中包含的验证框架。也许您可以将其与您的想法结合起来。

【讨论】:

  • 谢谢,我已经偶然发现了 ControlsFX,但这个例子似乎很糟糕,所以我看起来不够近。是的,从我已经拥有控制元素的角度来看,我可以完美地使用ControlsFX-Validation,因为我可以将正则表达式模式传递给方法,并且它还有助于在出现错误等情况下装饰控件。所以基本上,只剩下问题的一部分,那就是它是否是一种好方法使用 <properties> 获取规则 (=regex) 进行验证,如上例所示。我不能停止认为这也可以做得更好。
  • 总结一下我原来的问题:保存正则表达式进行验证的最佳位置在哪里以及如何将它们绑定到输入元素?最初我想将正则表达式放在属性文件中,但我想现在我宁愿使用枚举或常量。但不知道如何将它们绑定到输入元素。
猜你喜欢
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2012-03-08
  • 1970-01-01
  • 2017-03-28
相关资源
最近更新 更多