Grails comando objeto vinculação de dados
Grails hasmuito bom suporte para vincular parâmetros de solicitação a um objeto de domínio e suas associações. Isso depende muito da detecção de parâmetros de solicitação que terminam com.id
e carregando automaticamente os do banco de dado
No entanto, não está claro como preencher as associações de um objeto de comando. Veja o seguinte exemplo:
class ProductCommand {
String name
Collection<AttributeTypeCommand> attributeTypes
ProductTypeCommand productType
}
Este objeto tem uma associação única comProductTypeCommand
e uma associação múltipla comAttributeTypeCommand
. A lista de todos os tipos de atributos e produtos está disponível em uma implementação desta interface
interface ProductAdminService {
Collection<AttributeTypeCommand> listAttributeTypes();
Collection<ProductTypeCommand> getProductTypes();
}
Use essa interface para preencher as listas de seleção de produtos e tipos de atributos em um GSP. Eu também injeto dependência nessa interface no objeto de comando e a uso para "simular"attributeTypes
eproductType
propriedades no objeto de comando
class ProductCommand {
ProductAdminService productAdminService
String name
List<Integer> attributeTypeIds = []
Integer productTypeId
void setProductType(ProductTypeCommand productType) {
this.productTypeId = productType.id
}
ProductTypeCommand getProductType() {
productAdminService.productTypes.find {it.id == productTypeId}
}
Collection<AttributeTypeCommand> getAttributeTypes() {
attributeTypeIds.collect {id ->
productAdminService.getAttributeType(id)
}
}
void setAttributeTypes(Collection<AttributeTypeCommand> attributeTypes) {
this.attributeTypeIds = attributeTypes.collect {it.id}
}
}
O que realmente acontece é que oattributeTypeIds
eproductTypeId
s propriedades @ estão vinculadas aos parâmetros de solicitação relevantes e os getters / setters "simulam"productType
eattributeTypes
propriedades. Existe uma maneira mais simples de preencher as associações de um objeto de comando?