У вас есть несколько вариантов здесь, которые не связаны с привлечением компонента tagLib из приложения grails.
Вариант 1: Если вы не слишком беспокоятся о i18n формат даты в службе, используя стандартные методы заводной.
static final String DATE_FORMAT = 'dd-MM-yyyy'
// ...
Date date = new Date()
String formattedDate = date.format(DATE_FORMAT)
(Это все, что вам нужно, нет дополнительных импорта)
Вариант 2: Если вы беспокоитесь о i18n и все еще хотите отформатировать дату в службе, то вы можете получить по умолчанию формат даты
Но сначала нужно получить локали в службе, (это когда сигнал тревога должна начать звон)
// Don't do this...
import org.springframework.context.i18n.LocaleContextHolder;
// ...
String locale = LocaleContextHolder.getLocale()
// Don't do that ^^^
Это получает локаль, связанную с текущим потоком, если таковой имеется, или по умолчанию по умолчанию для Locale. Но мы хотим, чтобы локаль пользователя выполнялась из запроса или сеанса.
(Эти сигналы тревоги должны быть соединен красными мигалками теперь)
Но если вы хотите сделать это, а затем передать запрос в от контроллера с помощью вызова метода.
Затем вы можете использовать
import org.springframework.web.servlet.support.RequestContextUtils
// ...
def locale = RequestContextUtils.getLocale(request)
Таким образом, мы имеем локаль, и теперь мы можем получить сообщение
// include the grailsApplication bean in the service
def grailsApplication
// ...
// Get the date format
def dateFormat = grailsApplication.mainContext.getMessage('default.date.format', null, 'dd-MM-yyyy', locale)
// Then you can use the groovy default method
String formattedDate = date.format(dateFormat)
Не следует использовать статический метод, чтобы получить запрос на обслуживание. Если вы это сделаете, будильники и мигающие красные огни будут соединены сильным встряхиванием здания, в котором вы находитесь. Просто передайте его с контроллера.
Вариант 3: Формат даты в представлении
<g:set var="formattedDate" value="${g.formatDate(date: date)}" />
Это, несомненно, самый чистый метод, но иногда вы не используете шаблоны для возврата выходного сигнала.
Вариант 4:
Используйте TagLib и выход из контроллера после получения данных в службе. , например.
def model = service.getModel()
def output = myTagLib.myOutputHtmlMethod(model)
Затем вы можете использовать g.formatDate в myTagLib
Вы можете использовать тот же метод FormatDate от вас, если контроллер будем. Вот сообщение, объясняющее это. [здесь] (https://stackoverflow.com/questions/7095086/grails-date-format-in-english-language) Также, если вам нужно это от службы, вы все равно можете получить доступ к g, используя метод, описанный здесь [https : //stackoverflow.com/questions/1777640/using-g-render-in-a-grails-service) – Alidad
Возможно, можно использовать теги g. * от Controller. Однако теги-агенты AFAIK не могут использоваться из служб - и сейчас мне нужно гораздо больше (я удалю контроллер из вопроса). Спасибо в любом случае – pseudo
посмотрите это сообщение для доступа к g в службе, если вы действительно хотите использовать formatDate http://stackoverflow.com/questions/1777640/using-g-render-in-a-grails-service – Alidad