Groovy / Grails / Gorm日期没有分钟。

时间:2015-07-07 19:01:58

标签: grails groovy

我有一个带日期的复合主键。

id composite: ["division", "expenseDate"]

String division
Date expenseDate

def getPK() {
    ["division":division, "expenseDate":expenseDate]
}

我正在生成这样的页面链接。

<g:link controller="recoveryDetail" action="edit" params="${it.getPK()}">
    <g:formatDate format="MM/dd/yyyy" date="${it.expenseDate}" />
</g:link>

我最终得到了生成的网址

http://localhost:8080/pisr/recoveryDetail/edit?division=BUFFALO&expenseDate=2007-04-25+00%3A00%3A00.0

我希望消除时间显示在网址中。

我还发现很难将对象与来自数据库的日期的时间比较为零,但我的本地对象具有本地时间。示例&#34; division&#34;:&#34; BUFFALO&#34;,&#34; expenseDate&#34;:&#34; 2015-07-07T04:00:00Z&#34;。我如何返回零时间而不是当地时间。

最后我使用grails datePicker组件,当我收到params的日期时,我得到expenseDate_day:7, expenseDate_year:2015, expenseDate_month:7。如何将这些转换回groovy中的日期对象,以便我可以对日期进行以下查询?

RecoveryDetail.createCriteria().get  {
    eq("division", recoverySetupInstance.division)
    eq("expenseDate", expenseDate)
}

1 个答案:

答案 0 :(得分:1)

我会在评论之后尝试回答这个问题:Koloritnij

这种情况下的解决方案是将getPK正确更改为格式化日期。所有代码junkie正在通过getPK在domainClass中创建自己的参数映射,他可以在gsp中需要时手动执行:

因此,以下是GSP中的不同样式,此实例中顶部需要正确的调用:

<g:link action="edit" params="${instance.getPK2()}">
<g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - PK2 WAY
</g:link><br>

<g:link action="edit" params="${instance.getPK()}">
<g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - PK WAY
</g:link><br>

<g:link action="edit" params="${["division":instance.division, "expenseDate":g.formatDate(format:'MM/dd/yyy', date:instance.expenseDate)]}">
<g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - Formatted using g.format
</g:link><br>

<g:link action="edit" params="${["division":instance.division, "expenseDate":instance.expenseDate.format("MM/dd/yyy")]}">
    <g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - Formatted using format
</g:link><br>

各种GSP样式做同样的事情。

带有新getPK2的DomainClass(将日期格式化为核心)

class RecoveryDetail {

    //id composite: ["division", "expenseDate"]

    String division
    Date expenseDate

    def getPK() {
        ["division":division, "expenseDate":expenseDate]
    }

    def getPK2() {
        ["division":division, "expenseDate":expenseDate.format("MM/dd/yyy")]
    }
}

您的控制器输出:

class RecoverDetailController {
    def index() {
        def instance = RecoveryDetail.findByDivision('foo')
        [instance:instance]
    }

    def edit() { 
        render "params are ${params}"
        // -PK2 way:
        //params are [division:foo, expenseDate:07/08/2015, action:edit, format:null, controller:recoverDetail]

        // - PK WAY
        // params are [division:foo, expenseDate:2015-07-08 17:53:48.565, action:edit, format:null, controller:recoverDetail]

        //- Formatted using g.format
        //params are [division:foo, expenseDate:07/08/15, action:edit, format:null, controller:recoverDetail]

        //- Formatted using format
        //params are [division:foo, expenseDate:07/08/2015, action:edit, format:null, controller:recoverDetail]
    }

}

您在虚拟测试条目中加载引导程序:

import test.RecoveryDetail
class BootStrap {
    def init = { servletContext ->
        RecoveryDetail.findOrSaveWhere(division: 'foo', expenseDate:new Date()).save(flush:true)
    }
}