JSF中的转换器和验证器

来源:互联网 发布:上过好身材的体验知乎 编辑:程序博客网 时间:2024/05/19 22:46

JSF转换器

用户输入:
使用HTTP 请求发送到服务器。
被称为请求值。
作为字符串发送到服务器。
在处理之前,需要被转换成适当的数据类型。此转换过程称为转换。

标准转换器:在JSF 的核心标记库中作为标记提供,用于完成JSF 应用程序中的转换。
您还可以创建自己的转换器来满足应用程序的转换需求,这些转换器被称为自定义转换器

标准转换器:

是JSF 框架中的内置转换器。
可以使用JSF 核心标记库中提供的标记与JSF 页面的UI 组件相关联。
可用于将标准转换器与UI 组件关联的标记如下:

<c:convertNumber>将用户输入转换为数值。<c:convertDateTime>用于以指定格式和样式转换日期值。有各种属性,可用于指定特定的格式或样式。

这里写图片描述
例如:

<h:outputText value="#{payment.amount}"><!--表示用户在金额字段中输入的金额。它存储在paymentbean的amount属性中。--><c:convertNumber type="currency"/><!--将金额字段中输入的值转换为货币。--></h:outputText>

您还可以指定要用于货币的其他符号。
例如:

<h:outputText value="#{payment.amount}"><c:convertNumber type="currency"    currencySymbol="&euro;"/></h:outputText><!--指定用于货币的符号为€。-->

或者,您可以直接指定货币的符号作为currencySymbol属性的值

您也可以使用<c:convertNumber>标记的currencyCode属性添加特定于国家或地区的货币代码并将数字转换为货币。

<h:outputText value="#{payment.amount}"><c:convertNumber type="currency"   currencyCode="NZD"/></h:outputText>  <!--例如,如果您在金额字段中输入500,它将被转换为NZD500.00。将金额字段中输入的金额转换为货币并在金额前面添加NZD。-->

也可以将金额字段中输入的值转换为小数。

<h:outputText value="#{payment.amount}"><c:convertNumber minFractionDigits="4"/></h:outputText> <!--将金额字段中输入的值转换为小数点后至少有四位的小数。例如,如果您在金额字段中输入500,此金额将显示为500.0000。-->

这里写图片描述

例如:

<h:inputText value="#{payment.expDate}"><c:convertDateTime pattern="dd-MM-yyyy"/></h:inputText><!--表示用户在“到期日”字段中输入的到期日。用于将“到期日”字段中输入的value转换为日期。pattern属性指定应该在“到期日”字段中输入的日期的模式。-->

您可以使用UI 组件的converterMessage属性来指定用户定义的消息。
例如:

<h:inputText value="#{payment.expDate}" converterMessage="Enter date as dd-mm-yyyy, such as 20-04-2011"> <!--converterMessage属性指定用户定义的消息。当用户不按照dd-mm-yyyy 格式输入日期时,将显示用户定义的消息。--><c:convertDateTime pattern="dd-MM-yyyy"/></h:inputText>

自定义转换器:

JSF 框架为数字和日期提供了标准转换器。
然而,有时您可能需要将用户输入转换为数字和日期之外的数据类型。
要满足上述需求,您可以为应用程序创建自定义转换器。
JSF 允许您在包含转换器的实现逻辑的类中实现Converter接口来创建自定义转换器。
javax.faces.converter 包中提供了此接口。

Converter接口提供了以下方法来创建自定义转换器:

String getAsString(FacesContext context, UIComponent component, Object value)<!--将从bean 检索到的对象转换为可以在视图上显示的字符串。-->Object getAsObject(FacesContext context, UIComponent component, String newValue) <!--接受在UI 组件中指定的字符串值,并将该值作为对象转换。此对象可以用于更新bean 属性。-->

要创建自定义转换器并用它来执行用户输入的转换,需要执行以下步骤:

–创建实现javax.faces.converter.Converter 接口的类,并提供getAsObject()和getAsString() 方法的实现。

–在faces-config.xml 文件中或者通过使用@FacesConverter批注将类注册为自定义转换器。

–将自定义转换器与UI 组件关联。


JSF验证器

JSF 框架提供内置验证器,以执行不同类型的数据验证,该内置验证器也称为标准验证器。
如果标准验证器不符合应用程序的验证需求,也可以在JSF 应用程序中创建特定于应用程序的验证器。

标准验证器

是JSF 框架中的内置验证器。
通过使用JSF 核心标记库中提供的标记,可以将这些验证器与JSF 页面的UI 组件相关联。
可用于将标准验证器与UI 组件相关联的标记如下:

<c:validateDoubleRange><c:validateLength><c:validateLongRange><c:validateRequired><c:validateRegex>

<c:validateDoubleRange>标记:

用于验证double类型用户输入的范围。
有两个属性:minimum和maximum,您可以用它们来指定用户输入的范围。

<h:inputText value="#{payment.amount}"><c:validateDoubleRange minimum="200" maximum="10000"/></h:inputText><!--表示用户在“金额”字段中输入的金额。将“金额”字段的最小值和最大值范围分别指定为200和10000。-->

当您向UI 组件添加验证器后,如果用户输入不符合验证器中指定的条件,将向用户显示错误消息。
您可以使用UI 组件的validatorMessage属性来指定用户定义的消息。
例如:

<h:inputText value="#{payment.amount}" validatorMessage="The amount must be greater than 200 and less than 10000"><c:validateLongRange minimum="200"   maximum="10000"/></h:inputText><!--指定当用户未输入大于200 并小于10000 的金额时,将显示用户定义的消息。-->

<c:validateLength>标记:
<c:validateDoubleRange>标记类似。
用于验证用户输入的长度。
包含minimum和maximum属性以验证用户输入的长度。

<h:inputText id="cc" value="#{payment.cCNumber}"><!--表示用户在支付页面的“信用卡/借记卡”字段中输入的信用卡号。--><c:validateLength minimum="16"  maximum="16"/><!--将“信用卡号”字段的最小值和最大值范围指定为16。--></h:inputText>

<c:validateLongRange>标记:

<c:validateDoubleRange>标记类似。
用于验证long类型用户输入的长度。

<c:validateRequired>标记:
与UI 组件的required 属性类似。
用于确保用户必须在指定的字段中输入一个值。

<h:inputText value="#{payment.mobileNo}"><!--表示用户在支付页面的手机号字段中输入的手机号。--><c:validateRequired/><!--确保用户必须在支付页面的手机号字段中输入手机号--></h:inputText> 

或者,您也可以将其required属性设置为true以在手机号字段中实现相同的功能。
例如:<h:inputText value="#{payment.mobileNo}" required="true"></h:inputText>

<c:validateRegex>标记:
用于按照指定模式验证输入。
包含pattern属性,以指定验证用户输入所依据的模式。

<h:inputText value="#{payment.mobileNo}" required="true"><!--表示用户在支付页面的手机号字段中输入的手机号--><c:validateRegex pattern="[91]+\+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]"/><!--指定手机号必须以91+开头,后面是一个十位数。+ 号也用于连接字符串。所以,\用作转义序列,以将+号添加到91。--></h:inputText>

自定义验证器

自定义转换器是用户定义的验证器,用于满足特定于应用程序的验证需求。可被创建为:
实现Validator接口的类。
bean 方法。

Validator·接口:
提供了以下方法来创建自定义验证器:
void validate(FacesContext context, UIComponent component, Object value)
用此方法主体内实现的逻辑执行UI 组件的验证。

要将自定义验证器创建为Java 类,需要执行以下步骤:

  • 创建实现Validator接口的Java 类,并在validate()方法内实现验证逻辑。
  • 在faces-config.xml 文件中或者通过使用@FacesValidator批注将Java 类注册为自定义验证器。
  • 使用标记将自定义验证器应用于UI 组件。

bean 方法:
当您将自定义验证器创建为bean 方法时,可以使用方法表达式将此验证器添加到UI 组件。
与作为自定义验证器创建的类不同,您无需注册作为bean 方法创建的自定义验证器。
您可以直接使用作为bean 方法创建的验证器内的实例变量。
您必须确保该bean 中创建的验证器方法与Validator接口的validate()方法有相同的签名。

要将自定义验证器作为bean 方法创建和使用,需要执行以下步骤:

  • 在bean 中创建方法。
  • 使用validator 属性将此方法与UI 组件绑定。
0 0