【问题标题】:Setting Calendar property on Domain Object在域对象上设置日历属性
【发布时间】:2013-02-20 03:19:25
【问题描述】:

我今天在我的代码中遇到了一个有趣的问题。 我正在使用 Grails 2.2.0。

这里是代码

def user = lookupUserClass().get(params.id)
log.info "[update]user.subscriptionExpiryDate1: " + user.subscriptionExpiryDate
user.subscriptionExpiryDate = Calendar.getInstance();
log.info "[update]user.subscriptionExpiryDate2: " + user.subscriptionExpiryDate
if (user.subscriptionExpiryDate instanceof Calendar ) {
    log.error "***** Is A Calendar Instance ***"
} else if (user.subscriptionExpiryDate instanceof String ) {
    log.error "***** Is A String Instance ***"
}  else {
    log.error "***** Is Something else ***"
}

if (!user.save()) {
    log.error "[update]Error occured saving user. Errors are: "
    user.errors.each { err -> log.error err; }
    render view: 'edit', model: buildUserModel(user)
    return
} else {
    log.info "[update]Successfully saved user"
}

subscriptionExpiryDate 是我的User 对象中的一个日历属性。

当我执行保存时,我收到以下错误

无法将类型“java.lang.String”的属性值转换为属性“subscriptionExpiryDate”所需的类型“java.util.Calendar”;嵌套异常是 java.lang.IllegalArgumentException:无法解析日期:无法解析日期:05/03/2013

谁能解释一下为什么我会在上面的代码中看到这个错误,因为没有什么突出的

【问题讨论】:

  • 那么记录了上面的哪个错误消息?如果Unparsable date: 之后没有任何内容,则日期为空,因此无法解析/无效
  • 我建议您使用 Joda 代替 Calendar。见the plugin
  • @moeti 道歉,我没有粘贴完整日期,日期已打印出来并且是有效日期 Sergio - 谢谢 Sergio 我会记住这一点,但我很好奇为什么我的初始代码没有先工作
  • 您的 sn-p 似乎单独运行良好。在粘贴代码之前,您是否对 user 对象进行了任何数据绑定?如果您绑定到subscriptionExpiryDate 属性,则需要PropertyEditor 来进行String -> Calendar 转换
  • 嗨,安德鲁,是的,在那之前有一些绑定。感谢您提到 PropertyEditor,我去看看

标签: grails grails-2.2


【解决方案1】:

这个问题已经按照安德鲁斯的建议解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多