iberck
10/11/2016 - 6:03 PM

Grails command databinding - alternativa 1

Grails command databinding - alternativa 1

Las siguientes alternativas no se muestran como una solución al problema, sino como diferentes propuestas que ayudan a entender mejor cómo construir vistas a través de command objects

Problema

Se desea mapear los valores de una vista con N paneles, la lógica de validaciones de la vista no se desea en el domain class porque no es el lugar indicado para validar la lógica de los paneles.

Domain class:

class Params {
  
  // LAS MISMAS PROPIEDADES QUE EL COMMAND OBJECT.
  
  // Constraints para la bd
  static constraints = {
  }
  
}

Command object:

class ParamsCommand {
  
  String panelType

  // PANEL CONEKTA
  String sandboxPrivateKey
  String sandboxPublicKey
  // ...
  
  // PANEL GENERAL
  String emailContacto
  // ...
  
  // PANEL FINANZAS
  BigDecimal costoPunto
  // ...
  
}

Alternativa 1 (no funciona)

Crear un command que contenga las propiedades de todos los paneles en la vista, cada panel estará dentro de un form distinto.

El problema de la alternativa:

ParamsCommand contiene todas las propiedades de todos los paneles de la vista, sin embargo como solo se enviará la información de 1 solo panel, al hacer submit solo se tendrá en el command object los valores del form al que se hace submit. Cuando se envíe de vuelta el command object a la vista, se perderán los valores de los forms a los que no se hizo submit.