Привязка данных Grails - PullRequest
       13

Привязка данных Grails

2 голосов
/ 05 июля 2011

Мне нужно привязать параметры запроса к экземпляру следующего Java-класса (методы получения и установки отсутствуют):

public class ShippingHouse {

    private String name;
    private String description;
    private List<ShippingRule> shippingRules = new ArrayList<ShippingRule>();  
}

public class ShippingRule {

    private ShippingHouse shippingHouse;
    private String name
}

Обратите внимание, что между ShippingHouse и ShippingRule существует отношение 1: N, но каждый ShippingRule также имеет ссылку на ShippingHouse, которому он принадлежит.

Если бы это были классы команд / доменов Grails, я бы связал их с параметрами запроса

name=foo&description=bar&shippingRules[0].name=sr0&shippingRules[1].name=sr1

Но не похоже, что это установит ссылку на владельца ShippingHouse в каждом ShippingRule.Есть ли способ, которым я могу связать это автоматически, или я должен написать код сам?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2014

Don

Вам нужно будет написать код, чтобы сделать это самостоятельно, используя BindUsing или какой-либо другой подход. Связующее не принимает (и не должно) ничего о обратных ссылках от родителя к потомку. Если это были объекты GORM и связь была явной, то это не так, но в вашем случае связыватель не должен предполагать, что свойство shippingHouse в классе ShippingRule имеет какое-либо отношение к свойству shippingRules в классе ShippingHouse.

Также обратите внимание, что lucke84 сказал, что ваше "личное" подразумевается. Убедитесь, что вы понимаете, что это значит, если вы собираетесь удалить их. Если вы удалите их, компилятор сгенерирует публичные методы получения и установки для этих свойств, которые могут быть, а могут и не совпадать с вашими.

0 голосов
/ 05 июля 2011

Если вы хотите реализовать отношение 1: N между двумя классами, вы должны использовать правильный подход Grails.Примерно так:

class ShippingHouse {
    String name
    String description
    static hasMany = [shippingRules: ShippingRule]
}

class ShippingRule {
    String name
    static belongsTo = [shippingHouse: ShippingHouse]
}

Обратите внимание, что точки с запятой бесполезны и неявное объявление "private" для полей класса.

...