Validation 在应用程序中扩展JSF验证

Validation 在应用程序中扩展JSF验证,validation,jsf,Validation,Jsf,我们正在开发一个基于JSF(v2.0)框架的web应用程序。我们需要在应用程序中进行自定义验证。我们决定通过实现Validator类来扩展JSF验证框架 我们假设有多个输入字段需要验证。这些输入字段是名字、姓氏、电子邮件地址。我们需要用户在这些字段中输入信息。电子邮件地址字段将有两个验证-必需和isValidEmailAddress 我们应该能够在姓名和电子邮件地址字段中使用自定义必需的验证但每次我都希望为每个字段显示不同的错误消息。例如,如果是名字,我想显示名字是必需的。在姓氏的情况下,我想显

我们正在开发一个基于JSF(v2.0)框架的web应用程序。我们需要在应用程序中进行自定义验证。我们决定通过实现
Validator
类来扩展
JSF验证框架

我们假设有多个输入字段需要验证。这些输入字段是
名字、姓氏
电子邮件地址。
我们需要用户在这些字段中输入信息。电子邮件地址字段将有两个验证-
必需
isValidEmailAddress

我们应该能够在
姓名
电子邮件地址
字段中使用自定义
必需的
验证但每次我都希望为每个字段显示不同的错误消息。例如,如果是
名字
,我想显示名字
是必需的。在
姓氏
的情况下,我想显示姓氏是必需的`


如何对多个字段重复使用相同的
Required
验证实现,但错误消息不同?在JSF中有可能做到这一点吗?您能告诉我吗?

首先,您不需要为JSF中所需的输入编写自己的验证逻辑。这是框架本身提供的基本设施之一

JSF的验证框架从与验证相关的消息中清晰地抽象出来,因此两者不必相互依赖。您的选择:

  • 每个输入组件都有一个
    validatorMessage
    属性,允许您指定验证错误时将显示给用户的文本/字符串。对于您的特定用例,JSF进一步为输入组件指定
    required
    requiredMessage
    属性;分别执行所需输入并显示专门用于所需输入验证的消息。在您的用例中,这意味着您不需要为所需的输入编写自定义验证逻辑

  • 根据更好的设计原则,您可以在资源包(示例)中配置所有所需的验证/转换错误消息,并在jsf视图中引用资源包中的条目

  • 实现validator接口需要使用以下签名实现
    validate
    方法

       public void validate(FacesContext ctxt, UIComponent comp, Object value) throws ValidatorException
    

    comp
    指正在验证的组件,您可以从中获取其
    类、客户端ID等。
    value
    将提供组件提交的值

    我们无法使用资源包,因为我们决定将所有消息保留在数据库中,以便可以轻松更改(无需部署)。甚至“requiredMessage”也可以通过编程而不是硬编码来派生?@Apps警告:错误/警告消息等元素最好从静态源中使用。您不希望每次有人在webform中的条目出错时都访问数据库。话虽如此,您可以将所有消息加载到ApplicationScoped bean中,并在属性中引用它的成员变量(对应于字符串类型的消息)。您只需在应用程序范围内的beanThanks Kolossus中实现加载消息(来自DB、WS、文件等)的逻辑。即使它存储在数据库中,我们也会在第一次从数据库检索信息后将其存储在应用程序范围中。在所有后续请求中,将从应用范围内提供服务。我们是否可以使用验证程序界面并为每个组件显示不同的错误消息?@Apps是的,您可以。正如我在回答中所说的,每个组件都有自己的
    validatorMessage
    属性,在该属性中,您可以定义仅为该组件的验证错误显示的文本。但是,如何使自定义验证实现具有针对每个组件的不同消息的通用性?是否可以从客户端传递一些自定义属性,告诉自定义验证实现这是需要使用的错误消息密钥?