2009-12-21 5 views
6

grails 컨트롤러 외부에서 bindData() 기능을 제공하는 가장 좋은 방법에 대한 아이디어가 있다면 궁금합니다. 내 현재 프로젝트에서 나는 API를 반환 모델 개체에 몇 가지 그루비 클래스를 만들었습니다. 이 클래스에서는 xml을 파싱하고 클래스의 객체 목록을 반환하는 정적 메소드가 있습니다. 이러한 클래스에서 bindData 메서드를 사용하여 모든 타입 캐스팅을 난센스를 무시하고 싶습니다. 이 작업을 수행하는 방법은 에 대한 모든 제안을 환영합니다.컨트롤러 외부에서 bindData 메서드 사용

답변

8

서비스 클래스에서 bindData를 사용하는 비슷한 해결책을 찾고있었습니다. JT's blog에 해결책을 찾았습니다. 이 솔루션은 수입에 기본적으로 :

import org.codehaus.groovy.grails.web.metaclass.BindDynamicMethod 

는 코드에 이것을 추가 :

def foo = new Foo() 
BindDynamicMethod bind = new BindDynamicMethod() 
def args = [ foo, params, [exclude:['name', 'mail']] ] // for example 
bind.invoke(foo, 'bind', (Object[])args) 

(객체 []) 캐스트가 그루비/자바 호환성에 뒤 필요합니다. (Groovy는 'args'객체를 객체 배열이 아닌 ArrayList로 취급합니다.)

+0

스핀 오프 스레드 (적어도 executor-plugin과 함께 사용)의 경우 요청이 없어서 실패한 것 같습니다. ** java.lang.IllegalStateException : 스레드 바운드 요청을 찾을 수 없음 : 실제 웹 요청 외부의 요청 특성을 나타냅니다 ... ** – heikkim

관련 문제