Jak uzyskać wartość z właściwości komunikatu poza GSP? Na przykład odpowiednik Grails - uzyskanie wartości komunikatu od kontrolera
<g:message code="some.message"/>
ale w kontrolerze?
Jak uzyskać wartość z właściwości komunikatu poza GSP? Na przykład odpowiednik Grails - uzyskanie wartości komunikatu od kontrolera
<g:message code="some.message"/>
ale w kontrolerze?
Wewnątrz kontrolera lub TagLib, można użyć następujących:
g.message(code: 'some.message')
Jednak wewnątrz klas lub usług domeny, trzeba wstrzyknąć MessageSource i zadzwoń (metoda) z klasy Sping AbstractMessageSource GetMessage. Ten fragment pokazuje jak to zrobić:
import org.springframework.context.i18n.LocaleContextHolder as LCH
...
class MyServiceOrMyDomain {
def messageSource
...
messageSource.getMessage(code, msgArgs, defaultMsg, LCH.getLocale())
...
}
Można również importować walidacji tag lib i używać go chwycić źródło wiadomości.
import org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib
def g = new ValidationTagLib()
g.message(error: error)
Ale czy oblicza ustawienia regionalne bieżącego żądania? – fabien7474
@fabien Tak, to jest – vickirk
'g.message' wydaje się być lepszym sposobem niż' messageSource', ponieważ wymaga mniej kodu, nie musisz obsługiwać wyjątków i już wiesz [jak go używać] (http: // grails.org/doc/latest/ref/Tags/message.html). –
Niesamowita odpowiedź! Wielkie dzięki! – Topera
Po to, aby pomóc komuś, kto może mieć taki sam problem jak ja - myArgs musi być tablicą obiektów, na przykład: messageSource.getMessage ("some.code", ["arg1"] jako Object [], " default ", LCH.getLocale()) – MBozic
Używam grails 2.1. Wygląda na to, że nie możesz używać przestrzeni nazw g w kontrolerach. Użycie wiadomości (kod: "") wykonuje zadanie. Być może potrzebujesz teraz tylko przestrzeni nazw g dla taglibs. http://grails.org/doc/2.1.0/guide/single.html#i18n –