1

我正在开发一个基于 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

有人帮我解决这个问题。

4

1 回答 1

3

由于 JSF 使用java.util.Date和 derby 可能期望java.sql.Date,您必须做一些事情来适应这个差距:

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

    java.sql.Date date = new java.sql.Date(jsfProvidedDate.getTime());
    
于 2010-02-26T06:43:05.620 回答