2014-01-07 55 views
1

我想在服务使用g.formatNumber使用g.formatNumber,我已经尝试了下面的方法,我在网上得到。这是行不通的,它给我的错误"Cannot invoke method formatNumber() on null object",代码如下如何Grails的服务类

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 
    } 
} 

如何做到这一点。

+1

我不认为问题出在formatNumber()。你能否检查_g_在getFormattedNumber()内是否为空? –

+0

我认为@HernánErasmo是对的。 –

回答

5

我想在服务使用g.formatNumber

而不是通过你需要在服务中使用标签库箍跳,这将是简单的只使用java.text.NumberFormat直接

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

如果服务方法正在从一个网络请求处理线程调用那么你不妨使用LocaleContextHolder以获得正确的语言环境对当前Web请求,而不是仅仅使用服务器的默认。

+0

是的,这始终是一个解决方案,但在服务中使用特别摹标签是我的问题 – n92

0

这应该工作

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

你当然需要grailsApplication注入定义它ALA

def grailsApplication