【问题标题】:Timestamp Spring conversion时间戳 Spring 转换
【发布时间】:2012-09-22 05:46:06
【问题描述】:

我正在尝试使用时间戳。我在 jsp 中定义了一个来自 bean 的隐藏变量。

<form:input type="hidden" path="timeStamp" />

private Timestamp timeStamp;

public final Timestamp getTimeStamp() {
return (timeStamp == null)
? null : (Timestamp) timeStamp.clone();
}

public final void setTimeStamp(Timestamp timeStamp) {
this.timeStamp = (timeStamp == null)
? null : (Timestamp) timeStamp.clone();
}

时间戳是在插入操作中生成的,我需要它用于删除操作。我的问题是,在控制器中,一旦我试图删除最近插入的记录,这次 timeStamp 为空(但它在 jsp 中不为空)

public final void doActionDelete(DumyBean bean, Errors errors, ActionRequest actionrequest...)

bean.timeStamp 等于 null??我确定时间戳在jsp中,所以我猜是数据转换的问题。

(已编辑:)我认为问题在于 initBinder 方法,我正在做这样的事情......

@InitBinder
public final void initBinder(WebDataBinder binder) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    dateFormat.setLenient(false);

    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}

有没有可能,日期被解析为以“dd/MM/yyyy”格式显示在JSP中,之后spring不知道如何再次将其转换为timeStamp??

在 doAction 方法中,errors var 显示了这个错误,看来问题出在我所说的地方,但我不知道如何解决。

"Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Timestamp' for property 'timeStamp'; 
nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type
[java.sql.Timestamp] for property 'timeStamp': PropertyEditor [org.springframework.beans.propertyeditors.CustomDateEditor] 
returned inappropriate value of type [java.util.Date]

【问题讨论】:

  • 请更详细地描述您的问题,以获得更快更好的答案
  • 没问题。你需要知道什么..?
  • initbinder 应该双向生效 - 如果它在屏幕上显示时将您的时间戳转换为 dd/MM/yyyy,它也应该能够将其转换回来。如果您可以使用 DEBUG 模式运行,请查看 Spring 是否打印了更多信息。要尝试的另一件事可能是使用 java.util.Date
  • 应该是,但实际上不是。我已经编辑了我的问题以在控制器 doAction 方法中显示错误:“无法将类型 'java.lang.String' 的属性值转换为所需类型 'java.sql.Timestamp'”

标签: java spring timestamp


【解决方案1】:

问题写在异常中:

PropertyEditor [org.springframework.beans.propertyeditors.CustomDateEditor] 返回类型 [java.util.Date] 的不适当值

这意味着CustonDateEditor 会返回java.util.Date,但您需要Timestamp

因此你可以做两件事:

【讨论】:

  • 您的解决方案似乎很好。我只是在解析时间戳格式时遇到了一些问题。无论如何,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 2011-07-07
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多