2015-07-07 4 views
0

У меня есть составной первичный ключ с датой.Groovy/Grails/Gorm датируется мгновенными сообщениями.

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> 

Я в конечном итоге с генерируемой URL, как так

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

Я хотел бы, чтобы устранить время от появления в URL.

Мне также сложно сравнивать объекты с тем фактом, что даты, поступающие из базы данных, имеют нулевое время, но у моих локальных объектов есть локальное время. Пример «деление»: «BUFFALO», «costDate»: «2015-07-07T04: 00: 00Z». Как вернуть нулевое время, а не мое местное время.

Наконец, я использую компонент grails datePicker, и когда я получаю дату с параметрами, я получаю expenseDate_day:7, expenseDate_year:2015, expenseDate_month:7. Как преобразовать их обратно в объект даты в groovy, чтобы я мог выполнить следующий запрос к дате?

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

Ваш первый вопрос касается формата даты, который вы могли бы использовать formatDate или simpleDateFormat для форматирования даты в dd-mm-yyyy или что вы хотели. http://grails.github.io/grails-doc/latest/ref/Tags/formatDate.html. То для gsps. В контроллере вы можете сделать g.formatDate (формат: «yyyy-MM-dd» date: «$ {date}»). Второй вопрос вроде того - просто используйте объекты, чтобы сделать дату назад на другой стороне. – Vahid

+0

@vahid для чего использовать тег formatDate в контроллере? у вас есть красивый метод в объекте Date: format (String format). Итак, вместо g.formatDate (формат: «yyyy-MM-dd» date: «$ {date}») вы можете просто написать: date.format («yyyy-MM-dd») – Koloritnij

ответ

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, выполняющие идентичные вещи.

DomainClass с новым getPK2 (какие форматы дата права на ядре)

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) 
    } 
}