获取Date输入表单用户并使用JSF存储在数据库中时出错

时间:2010-02-26 04:13:28

标签: java jsf jdbc derby

我正在开发基于JSF技术的Web应用程序。我使用Eclipse作为IDE并使用Apache Derby作为数据库。

当获得用户输入时,我将其中一个字段作为日期字段,即出生日期。 但是当我更新数据库表时,我会收到错误报告。

 Date Of Birth:
 <h:inputText value="#{employeeBean.dob}">
 <f:convertDateTime type="date" pattern="yyyy-mm-dd"/>
 </h:inputText>

由于derby数据库以yyyy-mm-dd格式接受日期,我以相同的方式提供输入,并且也使用相同的格式。

这是我得到的错误。

 Exception while setting value for expression : #{employeeBean.dob} of component with 
 path : {Component-Path : [Class:javax.faces.component.UIViewRoot,ViewId: /homepage.jsp]
 [Class: javax.faces.component.html.HtmlForm,Id: j_id_jsp_996426310_1]
 [Class: javax.faces.component.html.HtmlInputText,Id: j_id_jsp_996426310_6]}

 Caused by:
 java.lang.IllegalArgumentException - Cannot convert 1/8/87 5:39 AM of type class
 java.util.Date to class java.sql.Date

有人帮助我。

1 个答案:

答案 0 :(得分:3)

由于JSF使用java.util.Date而德比可能期望java.sql.Date,所以你必须做一些事情来代表这个差距:

  • 将托管bean属性的类型更改为java.util.Date
  • 如果只做以上操作不起作用,请在保存之前进行转换。这可以使用以下构造函数完成(请注意,我不知道你将如何将对象持久化到数据库,所以我猜)

    java.sql.Date date = new java.sql.Date(jsfProvidedDate.getTime());