jueves, 30 de agosto de 2012

Command objects

Los controladores de Grails y las clases dentro de src/groovy soportan el concepto de los command objects. Un command object es similar a un bean. También se le puede definir validación.
- Declarando command objects
import grails.validation.Validateable

class SampleController {
  ...
}
@Validateable
class LoginCommand {
    String username
    String password

static constraints = { username(blank: false, minSize: 6) password(blank: false, minSize: 6) } 
}
* Como se muestra en el ejemplo, la clase del command object está marcada por la anotación Validateable, donde con esto podrás definir constraints del mismo modo que en las clases de dominio. Otra forma de hacer un command object validable es definirlo sin la anotación y meter una la siguiente línea en tu Config.groovy
grails.validateable.classes = [com.example.LoginCommand]
- Uso del command object
Para usar los command objects en las acciones de los controladores que se quieran utilizar, se le pasará como parámetro dicho command object.
class LoginController {

def login(LoginCommand cmd) { if (cmd.hasErrors()) { redirect(action: 'loginForm') return }

// work with the command object data } }
Antes de que la acción del controlador se ejecute, Grails creará automáticamente una instancia del command object y rellenará sus propiedades con los parámetros de la petición. Si el command object está marcado con @Validateable, entonces se validará con sus contraints.
- Inyección de dependencias dentro de los command objects
@Validateable
class LoginCommand {

def loginService

String username String password

static constraints = { username validator: { val, obj -> obj.loginService.canLogin(obj.username, obj.password) } } }
* Para quien le interese, también se puede crear command objects dentro de servicios. Aquí os dejo el enlace donde lo explican http://jts-blog.com/?p=252

No hay comentarios:

Publicar un comentario