Как использовать g.formatNumber в Grails Класс обслуживания

Я хочу использовать g.formatNumber в сервисе, я попробовал метод ниже, который я получил в Интернете. Это не работает, это дает мне ошибку "Cannot invoke method formatNumber() on null object", Код ниже

    import org.springframework.beans.factory.InitializingBean

    class MyService implements InitializingBean {
        boolean transactional = false
        def gspTagLibraryLookup  // being automatically injected by spring
        def g

        public void afterPropertiesSet() {
            g = gspTagLibraryLookup.lookupNamespaceDispatcher("g")
            assert g
        }

      def getFormattedNumber(){
       def number = g.formatNumber(number: 5000,234 , type: "number" , maxFractionDigits: 2)
       return number
     }
}

Как это сделать

2 ответа

Я хочу использовать g.formatNumber в сервисе

Вместо того, чтобы прыгать через обручи, которые вам нужны, чтобы использовать taglib внутри службы, проще было бы просто использовать java.text.NumberFormat непосредственно

NumberFormat format = NumberFormat.getNumberInstance()
format.maximumFractionDigits = 2
def number = format.format(5000.234)

Если метод службы вызывается из потока обработки веб-запросов, вы можете использовать LocaleContextHolder, чтобы получить правильный языковой стандарт для текущего веб-запроса, а не просто использовать настройки сервера по умолчанию.

Это должно работать

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib');

Вам, конечно, понадобится GrailsApplication, введенный путем определения его аля

def grailsApplication
Другие вопросы по тегам