我有一个带日期的复合主键。
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)
}
答案 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)
}
}