如何在grails服务类中使用g.formatNumber

如何在grails服务类中使用g.formatNumber,grails,gsp,number-formatting,grails-services,Grails,Gsp,Number Formatting,Grails Services,我想在服务中使用g.formatNumber,我已经尝试了下面的方法,这是我在网上得到的。这不起作用,它给了我一个错误“不能调用null对象上的formatNumber()方法”,代码如下 import org.springframework.beans.factory.InitializingBean class MyService implements InitializingBean { boolean transactional = false

我想在服务中使用g.formatNumber,我已经尝试了下面的方法,这是我在网上得到的。这不起作用,它给了我一个错误
“不能调用null对象上的formatNumber()方法”
,代码如下

    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
     }
}
如何做到这一点

我想在服务中使用g.formatNumber

直接使用
java.text.NumberFormat
会比在服务中使用标记库更简单,而不是跳转

NumberFormat format = NumberFormat.getNumberInstance()
format.maximumFractionDigits = 2
def number = format.format(5000.234)
如果服务方法是从web请求处理线程调用的,则您可能希望使用获取当前web请求的正确区域设置,而不仅仅是使用服务器的默认设置。

这应该可以工作

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib');
您当然需要通过定义grailsApplication注入它

def grailsApplication

我认为问题不在于formatNumber()。你能检查一下getFormattedNumber()中的g是否为null吗?我认为@HernánErasmo是正确的。是的,这总是一个解决方案,但在服务中特别使用g标记是我在grails 2.1
import groovy.xml.MarkupBuilder def g=Holders.grailsApplication.mainContext.getBean中提出的问题('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')