日期:2014-05-16  浏览次数:20560 次

JSF验证器和转换器
[b][/b]JSF验证器和转换器
                                                               ++YONG原创,转载请注明
1      验证器:
JSF是通过后台bean和验证器中的验证器方法来支持数据验证的。
1.1      使用验证器方法:
输入组件可关联到后台bean中的验证器方法。验证器方法通常用作应用特定的验证,重用性不高。假设有名为registrationBean的后台bean,它有一名为validateEmail的验证方法。那么在JSP中,便可以这样将输入组件关联到此方法:
<h:inputText id= "emailInput" validator= "#{registrationBean.validateEmail}"
              value= "#{registrationBean.email}" />

现在用户为这个控件输入一个值,validateEmail方法都将对其进行检查以确保其有效。如果成功,后台bean的email将被更新;否则,产生错误消息。
1.2      使用验证器:
对任何输入组件,你都可以注册一个或多个验证器。JSF内建了三个标准验证器。如下图:
JSP定制标签 属性 行为
<f:validateDoubleRange > minimum、maximum 确保组件的值可以被转换成double型数值,并且在指定的最小、最大值范围内
<f:validateLength > minimum、maximum 确保组件的值的长度在指定的最小、最大值范围内
<f:validateLongRange > minimum、maximum 确保组件的值可以被转换成long型数值,并且在指定的最小、最大值范围内

一个组件可以关联任意多个验证器。值得注意的是,每个组件都有required属性,它强制组件拒绝空值。这个不是标准的验证器,它验证行为是由输入组件自行处理的。
另外,你还可以定义自己的验证器。
2      转换器:
为了使用户界面能够以用户能够理解的方式显示对象,对象必须能够转换为适当的字符串以供显示。JSF提供了一套标准转换器来满足基本的类型转换的要求。当然你也可以编写自己的转换器或作用第三方提供的转换器。
你可以将转换器关联到几乎任何显示简单值的组件,特别是输入组件。要记住,转换器是双向的。它们最擅长的是调整对象显示给用户的方式,但是如果将它们与输入控件联合使用时,用户的输入格式必须按照转换器指定的格式。
JSF定义了两个标准转换器,DateTime转换器用来格式化日期对象,Number转换器用来格式化任何类型的数据,包括货币和百分数。
2.1      使用DateTime转换器:
JSP标签 属性 说明
<f:convertDateTime > dateStyle 指定字符串日期部分的格式样式。有效值有:
short、medium(默认)、long和full。仅在设置了type属性时有效
timeStyle 指定字符串时间部分的格式样式。有效值有:
short、medium(默认)、long和full。仅在设置了type属性时有效
timeZone 指定日期的时区。如果没有指定,将使用格林尼治标准时间(GMT)
locale 用来显示日期的特定场所。将覆盖用户的当前场所。
pattern 用于转换这个数值的日期格式模式,此模式与用于java.util.SimpleDateFormat类的格式模式是相同的。它和type属性只能选一个
type 指定是否显示日期、时间或两者都显示,有效值为:date、time、both

示例:假设user对象的dateOfBirth的值为2003年5月23日上午7点24分18秒
<h:inputText value="#{user.dateOfBirth}">
<f:convertDateTime pattern="yyyy-MM-dd (HH:mm)" />
</h:imputText>

则这段代码将会在文件框显示2003-05-23 (07:24)。用户输入的日期格式也要是这种模式的,否则将产生转换错误。
2.2      使用Number转换器:
标签 属性 说明
<f:convertNumber /> currencyCode 当type为currency时,指定三位数的国际货币代码。
currencySymbol 当type为currency时,指定特定的记号,如“$”。
groupingUsed 如果应该使用的分组记号(如:”,”或” ”)为true。默认为true
integerOnly 如果只需要处理输入值的整数部分(小数部分将被忽略),则设置为true。默认值为false
locale 用于显示这个数据的特定场所。将覆盖用户的当前场所。
minFractionDigits 要显示的最小小数位数
maxFractionDigits 要显示的最大小数位数
minIntegerDigits 要显示的最小整数位数
maxIntegerDigits 要显示的最大整数位数
pattern 用于转换数值的小数格式模式。它和type属性二选一
type 数值的类型:可以是number(默认值)数字、currency货币或者percentage百分比。

示例:
<h:inputText id="CurrencyDigitsInput" value="#{user.balance}">
<f:convertNumber type="currency" minIntegerDigits="2"
                    maxIntegerDigits="5" maxFractionDigits="2"
                    currencySymbol="$" />
</h:inputText>

我们指定为最小2位整数和最大5位整数,以及两位小数且货币符号为“$”。所以,对于数值12345678.9876,转换器将显示$45,678.99。第五位整数左边的数字(123)将被切去。另外,只有两位小数被显示,最后一位被四舍五入。