NetBeans中JSF应用开发(6)
来源:互联网 发布:js的设计模式 编辑:程序博客网 时间:2024/06/11 10:20
创建自定义转换器
尽管使用必填域和转换器进行验证非常简单,但是也非常有限。例如,验证器可以验证生日域是一个有效的日期,但是不能验证日期是之前的日期。为了调整日期验证的方式,我们将创建一个自定义验证器。我们的验证器将验证日期的格式是正确的并且是过去的日期。如果遇到错误,验证器将显示相应的消息。
要创建一个自定义转换器,你需要创建一个实现javax.faces.converter.Converter接口的类,并且在faces-config.xml中注册这个类。你可以通过<f:converter>标记来使用转换器。
1. 右键点击工程节点,然后选择New > Java Class,把类命名为MyDateConverter,并放在astrologer.convert包中,然后点击Finish。
2. 在类的声明中,实现Converter接口,如下:
public class MyDateConverter implements Converter {
3. 使用IDE的提示来添加合适的import语句,并实现抽象方法。 (在前面部分,你使用了IDE提示来实现validate方法)。IDE生成两个方法:getAsObject and getAsString。
4. 把下面的代码添加在方法getAsObject中(确保把方法声明中的String参数改成value):
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
String pattern = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date nDate;
try {
nDate = sdf.parse(value);
} catch (ParseException ex) {
FacesMessage message = new FacesMessage();
message.setDetail("Date is missing or not valid");
message.setSummary("Date is missing or not valid");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ConverterException(message);
}
if(nDate.getTime() > new Date().getTime()){
FacesMessage message = new FacesMessage();
message.setDetail("Date is bigger than current date");
message.setSummary("Date is bigger than current date");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ConverterException(message);
}
return nDate;
}
5. 修改方法的签名,并把下面的代码添加到getAsString方法中 (在方法签名中,确保把Object参数的名字修改为value):
public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object value) {
return value.toString();
}
6. 使用Alt+Shift+F添加必须的import语句。 (你应该选择引入java.text.ParseException和java.util.Date)
7. 代开faces-config.xml,然后添加下面的代码:
<converter>
<converter-id>astrologer.MyDateConverter</converter-id>
<converter-class>astrologer.convert.MyDateConverter</converter-class>
</converter>
8. 打开greeting.jsp更新表单:
<p>Enter your name: <h:inputText value="#{UserBean.name}" id="name" required="true"/>
<h:message for="name" style="color:#f00;" /></p>
<p>Enter your email: <h:inputText value="#{UserBean.email}" id="email" required="true">
<f:validator validatorId="astrologer.EmailValidator" />
</h:inputText>
<h:message for="email" style="color:#f00;" /></p>
<p>Enter your birthday: <h:inputText value="#{UserBean.birthday}" id="birthday" required="true">
<f:converter converterId="astrologer.MyDateConverter" />
</h:inputText> <h:message for="birthday" style="color:#f00;" />
(dd/mm/yyyy)</p>
<h:commandButton value="Submit" action="#{UserBean.submit}" />
9. 运行工程,当您输入一个无效的日期或者将来的日期,您将会看到下面的错误信息:
关于自定义转换器参考书上180页。
书:《Java EE 5实用教程》
- NetBeans中JSF应用开发(6)
- NetBeans中JSF应用开发(6)
- NetBeans中JSF应用开发(1)
- NetBeans中JSF应用开发(2)
- NetBeans中JSF应用开发(4)
- NetBeans中JSF应用开发(5)
- NetBeans中JSF应用开发(1)
- NetBeans中JSF应用开发(2)
- NetBeans中JSF应用开发(4)
- NetBeans中JSF应用开发(5)
- NetBeans中JSF应用开发
- NetBeans中JSF应用的开发(3)
- NetBeans中JSF应用的开发(3)
- NetBeans中Web应用的开发
- NetBeans 中开发 Yii
- asp.net vs. jsf(web应用的快速开发)
- 应用JSF、Ajax和Seam开发Portlets(1/3)
- 在JSF中应用javascript(关于jsf的action与js的问题)
- 微软网站迁移到Windows Server 2008服务器
- js准确计算字符串长度
- Linux常用技巧之二
- NetBeans中JSF应用开发(4)
- NetBeans中JSF应用开发(5)
- NetBeans中JSF应用开发(6)
- Linux常用技巧之三
- 在https中使用http的提示信息
- Linux常用技巧之四
- Dreamee.Soft.DueDate.Manager.Professional.Edition.v5.0.ALL.PPC.Retail
- 删除指定目录下的所有文件的java类
- 使用表值函数进行通用查询
- C# Visual Studio 2005中设为启动项
- javascript可输入的下拉列表