Как использовать 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