2014-01-07 10 views
1

g.formatNumber를 사용하고 싶습니다. 아래의 방법을 시도해 보았습니다. 이는 나에게 오류 "Cannot invoke method formatNumber() on null object"을 제공 작동하지 않는 코드는이 작업을 수행하는 방법을grails에서 g.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 
    } 
} 

이하입니다.

+1

람을 정의하여

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

당신은 물론의 GrailsApplication 주입해야합니다 작동합니다(). getFormattedNumber()에서 _g_이 null인지 확인해 주시겠습니까? –

+0

@ HernánErasmo가 옳다고 생각합니다. –

답변

5

난 당신이 서비스 내에서 태그 라이브러리를 사용하는 데 필요한 농구를 통해 점프보다

오히려 서비스 g.formatNumber를 사용하려면, 그냥 java.text.NumberFormat 직접

NumberFormat format = NumberFormat.getNumberInstance() 
format.maximumFractionDigits = 2 
def number = format.format(5000.234) 
를 사용하는 것이 더 간단 할 것

웹 요청 처리 스레드에서 서비스 메서드를 호출하는 경우 LocaleContextHolder을 사용하면 서버의 기본값을 사용하는 대신 현재 웹 요청에 대한 올바른 로캘을 가져올 수 있습니다.

+0

예, 이것은 항상 해결책입니다.하지만 서비스에서 특별히 g 태그를 사용하는 것은 제 질문이었습니다. – n92

0

이 나는 ​​문제가 formatNumber에있다 생각하지 않는다

def grailsApplication