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)将被切去。另外,只有两位小数被显示,最后一位被四舍五入。
3 自定义验证器:
4 自定义转换器:
编辑一条数据的时候,显示的时候 对从数据库取出来的数据 <f:convertNumber type="number"pattern="#.00"/>
再次保存的时候
<f:validateDoubleRange minimum="0"maximum="999999999999999"></f:validateDoubleRange>来验证用户输入的是double
再次保存的时候
<f:validateDoubleRange minimum="0"maximum="999999999999999"></f:validateDoubleRange>来验证用户输入的是double