Validation 在JavaFX中使用这种输入验证方法有什么缺点吗?
由于JavaFX中似乎没有输入验证的方法,所以我在考虑如何在当前项目中以干净的方式进行验证 以下是我的想法:Validation 在JavaFX中使用这种输入验证方法有什么缺点吗?,validation,javafx,Validation,Javafx,由于JavaFX中似乎没有输入验证的方法,所以我在考虑如何在当前项目中以干净的方式进行验证 以下是我的想法: 所有验证规则都是正则表达式(如“最小长度”、“非空”、“仅数字”等),它们存储在.properties文件中 示例:validationrules\u only\u numbers=“[0-9]+” 我在.fxml文件中通过为任何应该验证的输入定义标记来使用这种验证 例子: 在一个抽象/父控制器中,我编写了一个方法,该方法获取当前AnchorPane的所有子级,并对它们进行迭代(比如说
validationrules\u only\u numbers=“[0-9]+”
标记来使用这种验证
例子:
- 只需将验证规则添加到.properties文件中,即可轻松扩展这些规则
- 规则在.fxml文件中分配
- 所有控制器(扩展抽象/父控制器)不需要执行任何验证任务
- 验证规则都是正则表达式,我不知道这是否适用于所有输入字段(但我不介意编写“hacks”使其工作,因为我只会在父控制器中执行一次)
- 我必须使用instanceof检查控件,以便正确地将规则应用于此特定控件,因为并非所有控件都有
方法,并且需要以其他方式验证输入getText()
- 不知道是否有更好的方法将规则放入.fxml文件中,然后使用
我在谷歌上搜索了几天这个话题,似乎没有像我们在web开发社区所熟悉的那样真正好的解决方案。在重新发明轮子之前,您可能想看看ControlsFX包中包含的验证框架。也许你可以把它和你的想法结合起来。谢谢,我已经偶然发现了ControlsFX,但是这个例子似乎很糟糕,所以我没有仔细看。是的,从我已经有了控制元素的角度来看,我可以很好地使用ControlsFX验证,因为我可以将正则表达式模式传递给方法,它还可以帮助在出现错误等情况下装饰控件。因此,基本上,问题只剩下一部分,即使用
获取验证规则(=regex)是否是一种好方法,如上面的示例所示。我不能停止思考,这也可以做得更好。总结一下我最初的问题:保存正则表达式进行验证的最佳位置在哪里,以及如何将它们绑定到输入元素?最初我想把正则表达式放在一个属性文件中,但我想现在我更愿意使用枚举或常量。但是不知道如何将这些绑定到输入元素。另外,您能否提供代码示例或链接,以说明如何从节点
获取此
?我似乎找不到任何关于它的文档,而且它似乎很有趣@sillyfly假设您得到了一个ChoiceBox,如上面的示例所示,然后您可以执行observeMap controlProperties=ChoiceBox.getProperties()然后是stringrules=(String)controlProperties.get(“rules”)代码>谢谢。现在,我们只需要将其添加到场景生成器中: