目标:使用标准的验证器和转换器
设置某个域为必填的
首先我们需要做的是确保用户为
name
域输入一些信息,我们可以通过使用
inputText
组件的
required
属性轻松做到。
1.
打开
greeting.jsp
,然后修改
inputText
组件如下:
<p>Enter your name: <h:inputText value="#{UserBean.name}"
id="name" required="true"/>
<h:message for="name" /></p>
我们必须做的是给名字输入框一个
ID
,这样我们可以指定消息是哪个组件的消息。我们已经指定这个域是必填的,因此如果用户不输入任何信息,
Web
应用将显示错误信息。
2.
运行工程,然后不输入任何信息就点击
Submit
,您将会得到如下错误信息:
使用转换器
现在我们需要把我们的生日作为日期来处理,而不是任意的字符串。
JSF
框架提供了很多转换器,使用这些转换器可以把文本转换成对象类型,例如布尔类型等等。在转换数据的过程中,要验证数据对于要转换成的数据类型来说是否有效。对于我们的生日输入域来说非常方便,因为我们可以指定日期的格式,对输入进行验证,并同时得到一个
Date
对象。
1.
打开
greeting.jsp
,修改生日输入框
inputText
组件如下:
<p>Enter your birthday: <h:inputText value="#{UserBean.birthday}"
id="birthday" required="true">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText> (dd/mm/yyyy)
<h:message for="birthday" /></p>
我们必修做的是给生日一个
ID
,这样我们可以指定消息显示的时候是对应哪个组件的。然后把转换器的格式设置为
dd/MM/yyyy
。如果用户输入的信息不能匹配这个格式,将重新显示
greeting.jsp
文件,并显示错误信息。我们同样指定了这个域是必须的,就像姓名域一样。
2.
现在需要把
UserBean.java
中生日属性的类型修改为
Date
。打开
UserBean.java
,修改如下(粗体部分),并添加一个
import
语句,引入
java.util.Date
。
private String name;
private Date birthday;
...
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
3.
运行工程。如果不输入日期就点击
Submit
,你将得到下面的错误信息:
如果你输入了一个无效的日期,你将得到下面的错误信息:
标准转换器参考书上
177
页。
标准验证器参考书上
186
页。
书:《
Java EE 5
实用教程》