2009-12-21 15 views
6

मैं सोच रहा था कि अगर किसी को मेरे grails नियंत्रकों के बाहर कार्यक्षमता bindData() की कार्यक्षमता प्रदान करने का सबसे अच्छा तरीका है। मेरे वर्तमान प्रोजेक्ट में मैंने एपीआई द्वारा लौटाई गई वस्तुओं के मॉडल के लिए कई ग्रोवी क्लास बनाए हैं। इन वर्गों में मेरे पास एक स्थिर विधि है जो xml को पार करती है और कक्षा की वस्तुओं की सूची लौटाती है। मैं इन वर्गों में बाइंडडाटा विधि का उपयोग करके सभी प्रकार के कास्टिंग बकवास छोड़ना चाहता हूं। पर कोई सुझाव यह कैसे किया जाएगा इसकी सराहना की जाएगी।नियंत्रक के बाहर bindData विधि का उपयोग

उत्तर

8

मैं सेवा वर्ग में बाइंडडाटा का उपयोग करने के लिए एक समान समाधान की तलाश में था। मुझे 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) 

(वस्तु []) डाली ग्रूवी/जावा संगतता के लिए आवश्यक डु है। (ग्रोवी 'Args' ऑब्जेक्ट को ऑरेलेलिस्ट के रूप में देख रहा है, ऑब्जेक्ट्स की सरणी नहीं।)

+0

यदि इसका उपयोग स्पिन किए गए थ्रेड (कम से कम निष्पादक-प्लगइन के साथ) में किया जाता है, तो यह अनुपलब्ध अनुरोध के कारण विफल हो रहा है: ** java.lang.IllegalStateException: कोई थ्रेड-बाध्य अनुरोध नहीं मिला: क्या आप वास्तविक वेब अनुरोध के बाहर विशेषताओं का अनुरोध करने का जिक्र कर रहे हैं ... ** – heikkim

संबंधित मुद्दे