2013-05-22 5 views
0

Так что моя проблема в том, что мои ошибки проверки удаляются из моего объекта домена, прежде чем я смогу отобразить их на странице. Я думал, что исправил эту ошибку в прошлом, но она снова подкралась ко мне.Сессия Grails Hibernate или Spring Сделки, разрушающие ошибки проверки домена

Вот посмотрите на мою первоначальную реализацию. Ошибки сбрасывались при вызове tripService.stepData(trip).

Редактировать - я не должен, чтобы я испытал эту проблему только при добавлении страницы в hasMany.

Controller -

Trip trip = tripService.savePrePaymentInfo(params) 

    if (trip.hasErrors()) { 
     render(view: "step4", model: tripService.stepData(trip)) 
    } 
    else { 
     redirect(action: trip.status.action, id:trip.id) 
    } 

Сервис -

Map stepData(Trip trip) 
{ 
    Map returnSet = [:] 
    returnSet.status = Status.findAllByActionNotEqual("review") 
    returnSet.trip = trip 
    returnSet 
} 

Так что я читал некоторые онлайн и кто-то один на форуме сообщение, как 2 года назад сказал, что что-то в hibernate..possible ошибка ... Я не знаю, но их предложение сработало. Предложение было обернуть контроллер в withTransaction:

Trip.withTransaction { 

//Controller code here 

} 

Это работает для меня хорошо. Проблема в том, что у меня есть taglib, на мой взгляд, который вызывает снова tripService. Когда этот вызов выполняется, он очищает мои ошибки проверки. Это действительно расстраивает. Кто-нибудь имеет ЛЮБОЕ представление о том, что я могу сделать, чтобы разрешить это?

Edit: Добавление метода сервис вызывается из TagLib:

String findBannerName(Long pidm, String format = 'LFMI') 
{ 
    "abc" 
    //It really doesnt matter what is here - tried just returning this string and it produced the issue   
} 
+1

Возможно, это связано с тем, что ваше обслуживание является транзакционным, даже если 'stepData()' is not? Что произойдет, если вы объявите setpData не транзакционным? –

+0

Можете ли вы объявить методы обслуживания не транзакционными, не имея всего этого сервиса? –

+0

Я думаю, что единственный способ, который работает, - установить службу на транзакционное ложное и аннотировать методы, которые должны быть транзакционными. –

ответ

0

Вы уверены, что свойство trip.errors заполняется в первую очередь?

Кроме того, какой метод tripService вы вызываете в taglib?

+0

Да, я уверен.Добавлен метод для вас на вопрос. –

+0

Посмотрите на фрагменты формулировки и примеры кода в http://grails.org/doc/2.1.0/guide/services.html, «Ошибки проверки и отката»: «Повторное отображение того же представления, что транзакция была свернута назад вы можете повторно ассоциировать ошибки с обновленным экземпляром перед рендерингом ». – Jukka

+0

Я вижу этот пример, как он будет работать для новых объектов, у которых нет идентификатора? Также ... просто мнение ... это действительно действительно глупо, если это нужно сделать именно так. –

Смежные вопросы