Grails数据绑定

时间:2011-07-05 08:58:53

标签: data-binding grails groovy

我需要将请求参数绑定到以下Java类的实例(省略getter和setter):

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
}

请注意ShippingHouseShippingRule之间存在1:N关系,但每个ShippingRule也有ShippingHouse thaat拥有它的引用。

如果这些是Grails命令/域类,我会用请求参数绑定它们

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

但似乎这不会在每个ShippingHouse中设置对拥有ShippingRule的引用。有没有办法可以自动绑定,或者我必须自己编写代码吗?

2 个答案:

答案 0 :(得分:0)

唐,

您需要使用BindUsing或其他方法编写代码来自行完成。活页夹没有(并且不应该)假设从父母到孩子的背引用。如果这些是GORM实体并且关系是明确的,那就不同了,但在您的情况下,绑定器不应该假设ShippingRule类中的shippingHouse属性与ShippingHouse类中的shippingRules属性有任何关系。

另请注意,lucke84表示您的私人&#34;是隐含的。如果要删除它们,请确保您了解这意味着什么。如果删除它们,编译器将为这些属性生成公共getter和setter方法,这些方法可能是您想要的,也可能不是。

答案 1 :(得分:-1)

如果要在两个类之间实现1:N关系,则应使用正确的grails方法。像这样:

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

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

请注意,分号是无用的,类字段上的“私有”声明是隐含的。