进行jsf表单验证的最佳方法
如果我在一个表单中有许多输入控件(每个输入控件都有单独的验证器-如required、length等),那么有一个命令按钮提交表单并调用操作方法。要求是——尽管输入控制值(比如说)可以单独使用——这些值的组合应该可以在表单提交后一起处理它们——我应该将验证它们的代码放在哪里 1) 我可以为命令按钮添加自定义验证器并一起验证组合吗?像进行jsf表单验证的最佳方法,jsf,Jsf,如果我在一个表单中有许多输入控件(每个输入控件都有单独的验证器-如required、length等),那么有一个命令按钮提交表单并调用操作方法。要求是——尽管输入控制值(比如说)可以单独使用——这些值的组合应该可以在表单提交后一起处理它们——我应该将验证它们的代码放在哪里 1) 我可以为命令按钮添加自定义验证器并一起验证组合吗?像validate(FacesContext arg0,UIComponent arg1,Object value)但即使这样,我也不会有其他输入控件的值,除了命令按钮的
validate(FacesContext arg0,UIComponent arg1,Object value)
但即使这样,我也不会有其他输入控件的值,除了命令按钮的/component的值,对吗
2) 我是否可以在操作方法中对组合进行验证,并使用FacesMessage
添加验证消息
或者你有没有其他建议
谢谢您的时间。我已经成功地使用了第二种方法:
FacesMessage facesMessage =
new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
波佐已经回答了第2点。就用吧。
null
客户端ID将允许它进入
。像formId:inputId
这样的固定客户端ID将允许它进入
第1点是可行的,您可以使用以下方法获取validator方法中的其他组件:
但是,您需要将f:validator
放在最后一个UIInput
组件中。将其放入ui命令
组件(如按钮)将无法工作
诚然,硬编码客户机ID是令人讨厌的,但这是JSF中有点不灵活的验证机制的回报。我刚刚在你的帖子上提出了同样的问题 我迄今阅读的文章指出,有四种验证类型,用于以下目的:
Seam的JSF实现部分有一个
控件,它可以将表单中其他地方的字段ID作为参数。不幸的是,似乎没有任何MyFaces/Mojara/Sun JSF实现具有等效性,因为它不是标准的一部分。按照第二种方法添加消息后,如何停止执行?谢谢Bozho。我更愿意使用第二种方法。
UIInput otherInput = (UIInput) context.getViewRoot().findComponent("formId:otherInputId");
String value = (String) otherInput.getValue();