Привязка только некоторых свойств к объекту домена grails? - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть такая карта:

['var1':'property1', 'var2':'3']

и такой класс:

class MyClass{
   MyEnum var1
   int var2
   String var3
}
enum MyEnum{
   PROP1( "property1" )
   PROP2( "property2" );

   private final String variable;

   public MyEnum( String variable ){ this.variable = variable }
   public String getVariable(){ return variable }
}

Я хотел бы просто попытаться привязать var1 и var2 к какому-либо существующему объекту, чтобы получить проверки, но как мне это сделать?

Ответы [ 4 ]

6 голосов
/ 28 апреля 2011

Вы можете использовать bindData внутри контроллера. Этот метод имеет необязательные аргументы, которые позволяют вам явно указать, какие свойства должны быть включены или исключены привязкой, например

def map = ['var1':'property1', 'var2':'3']
def target = new MyClass()

// using inclusive map
bindData(target, map, [include:['var1', 'var2']])

// using exclusive map
bindData(target, this.params, [exclude:['var2']])

Если вы хотите выполнить привязку такого типа вне контроллера, используйте один из методов org.codehaus.groovy.grails.web.binding.DataBindingUtils, например,

/**
 * Binds the given source object to the given target object performing type conversion if necessary
 *
 * @param object The object to bind to
 * @param source The source object
 * @param include The list of properties to include
 * @param exclude The list of properties to exclud
 * @param filter The prefix to filter by
 *
 * @return A BindingResult or null if it wasn't successful
 */
public static BindingResult bindObjectToInstance(Object object, Object source, List include, List exclude, String filter) 

Вот пример использования этого метода для выполнения той же привязки, что и при вызове «включающей карты» bindData выше

def map = ['var1':'property1', 'var2':'3']
def target = new MyClass()
DataBindingUtils.bindObjectToInstance(target, map, ['var1', 'var2'], [], null)
1 голос
/ 27 апреля 2011

Для этого вы можете использовать метод bindData , чтобы вы могли указать, какие свойства вы хотите связать, а какие нет.

0 голосов
/ 01 мая 2015

Вы также можете использовать следующий синтаксис:

// update the var1 and var2 properties in the target
target.properties['var1', 'var2'] = params

Как описано в Перечисление кода 4 из Безопасное связывание данных с Grails

0 голосов
/ 28 апреля 2011

Вы также можете попробовать

Map myClassMap = ['var1':'property1', 'var2':'3']
//You can use either of the following options
MyClass myClass = new MyClass(myClassMap) 
myClass.properties = myClassMap
...