Validation 在JavaFX中使用这种输入验证方法有什么缺点吗?

Validation 在JavaFX中使用这种输入验证方法有什么缺点吗?,validation,javafx,Validation,Javafx,由于JavaFX中似乎没有输入验证的方法,所以我在考虑如何在当前项目中以干净的方式进行验证 以下是我的想法: 所有验证规则都是正则表达式(如“最小长度”、“非空”、“仅数字”等),它们存储在.properties文件中 示例:validationrules\u only\u numbers=“[0-9]+” 我在.fxml文件中通过为任何应该验证的输入定义标记来使用这种验证 例子: 在一个抽象/父控制器中,我编写了一个方法,该方法获取当前AnchorPane的所有子级,并对它们进行迭代(比如说

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

以下是我的想法:

  • 所有验证规则都是正则表达式(如“最小长度”、“非空”、“仅数字”等),它们存储在.properties文件中 示例:
    validationrules\u only\u numbers=“[0-9]+”
  • 我在.fxml文件中通过为任何应该验证的输入定义
    标记来使用这种验证 例子:
  • 在一个抽象/父控制器中,我编写了一个方法,该方法获取当前AnchorPane的所有子级,并对它们进行迭代(比如说,在用户单击OK提交表单之后)。所有具有验证规则的子级都将传递给另一个方法,该方法根据inputfield的类型将验证规则应用于输入
  • 所有有验证错误的控件都会高亮显示
  • 我个人喜欢这个想法:

    • 只需将验证规则添加到.properties文件中,即可轻松扩展这些规则
    • 规则在.fxml文件中分配
    • 所有控制器(扩展抽象/父控制器)不需要执行任何验证任务
    我不喜欢/不确定它在现实中是否有效:

    • 验证规则都是正则表达式,我不知道这是否适用于所有输入字段(但我不介意编写“hacks”使其工作,因为我只会在父控制器中执行一次)
    • 我必须使用instanceof检查控件,以便正确地将规则应用于此特定控件,因为并非所有控件都有
      getText()
      方法,并且需要以其他方式验证输入
    • 不知道是否有更好的方法将规则放入.fxml文件中,然后使用
    你的想法是什么?这里有什么重要的东西我遗漏了吗


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

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

    谢谢,我已经偶然发现了ControlsFX,但是这个例子似乎很糟糕,所以我没有仔细看。是的,从我已经有了控制元素的角度来看,我可以很好地使用ControlsFX验证,因为我可以将正则表达式模式传递给方法,它还可以帮助在出现错误等情况下装饰控件。因此,基本上,问题只剩下一部分,即使用
    获取验证规则(=regex)是否是一种好方法,如上面的示例所示。我不能停止思考,这也可以做得更好。总结一下我最初的问题:保存正则表达式进行验证的最佳位置在哪里,以及如何将它们绑定到输入元素?最初我想把正则表达式放在一个属性文件中,但我想现在我更愿意使用枚举或常量。但是不知道如何将这些绑定到输入元素。另外,您能否提供代码示例或链接,以说明如何从
    节点
    获取此
    ?我似乎找不到任何关于它的文档,而且它似乎很有趣@sillyfly假设您得到了一个ChoiceBox,如上面的示例所示,然后您可以执行
    observeMap controlProperties=ChoiceBox.getProperties()stringrules=(String)controlProperties.get(“rules”)谢谢。现在,我们只需要将其添加到场景生成器中: