Привязка данных командного объекта Grails

Grails имеет очень хорошую поддержку для привязки параметров запроса к объекту домена и его ассоциациям. Это в значительной степени зависит от обнаружения параметров запроса, которые заканчиваются на .id , и их автоматической загрузки из базы данных.

Однако неясно, как заполнить ассоциации командного объекта. Возьмем следующий пример:

class ProductCommand {

    String name
    Collection attributeTypes 
    ProductTypeCommand productType
}

Этот объект имеет одностороннюю связь с ProductTypeCommand и многостороннюю связь с AttributeTypeCommand . Список всех типов атрибутов и типов продуктов доступен в реализации этого интерфейса

interface ProductAdminService {
    Collection listAttributeTypes();
    Collection getProductTypes();
}

Я использую этот интерфейс для заполнения списков выбора продуктов и типов атрибутов в GSP. Я также внедряю этот интерфейс в командный объект и использую его для «имитации» свойств attributeTypes и productType в командном объекте

class ProductCommand {

    ProductAdminService productAdminService

    String name   

    List attributeTypeIds = []
    Integer productTypeId

    void setProductType(ProductTypeCommand productType) {
        this.productTypeId = productType.id
    }

    ProductTypeCommand getProductType() {
        productAdminService.productTypes.find {it.id == productTypeId}        
    }

    Collection getAttributeTypes() {

        attributeTypeIds.collect {id ->
            productAdminService.getAttributeType(id)
        }
    }

    void setAttributeTypes(Collection attributeTypes) {
        this.attributeTypeIds = attributeTypes.collect {it.id}
    }
}

На самом деле происходит то, что attributeTypeIds и свойства productTypeId привязаны к соответствующим параметрам запроса, а геттеры / установщики «моделируют» свойства productType и attributeTypes . Есть ли более простой способ заполнить ассоциации командного объекта?

24
задан Jay P. 14 March 2012 в 08:06
поделиться