Grails数据与命令对象绑定

时间:2012-04-24 00:25:16

标签: data-binding grails command

有人可以向我解释一下grails中的哪些特定类和命令对象的数据绑定是什么?

在JSON帖子请求的情况下,我看到了一些奇怪的行为。例如,我有嵌套的命令对象,这些命令对象是使用自定义属性编辑器注册的。我的自定义属性编辑器仅在我有内部命令的集合时使用,即我看到在这种情况下调用setValue(Object obj)。例如,

class TestCommand
{
  List<InnerCommand> innerCommands = ListUtils.lazyList([], FactoryUtils.instantiateFactory(InnerCommand))
}

但是当我有一个简单的嵌套命令时,我的属性编辑器没有被调用,我不想要。例如,

class TestCommand
{
  InnerCommand cmd = new InnerCommand
}

在这种情况下,我的自定义编辑器的setValue(Object obj)和setAsString(String text)都没有被调用。

我正在使用带有JSON输入的帖子请求。如果有人理解这种行为,请告诉我。

1 个答案:

答案 0 :(得分:0)

在Grails中实现命令对象有两种方法

1)在控制器内创建命令对象 2)在src / groovy目录中创建命令对象

两种方式都必须在课程开始之前定义注释“@ grails.validation.Validateable”

1)输入1 LoginController.groovy

class LoginController{

       def login(){
            LoginCommand loginCommand=new LoginCommand()
            bindData(loginCommand, params)
           if(loginCommand.validate()){
             render 'login success'
           }else{
             render 'invalid user name or password'
           }
       }
    }

@grails.validation.Validateable
class LoginCommand {

        String emailId
        String password

        static constraints = {
        emailId blank:false,nullable:false,email:true
        password blank:false,nullable:false
    }

}

2)输入2 LoginCommand.groovy

@grails.validation.Validateable
class LoginCommand {

    String emailId
    String password

    static constraints = {
        emailId blank:false,nullable:false,email:true
        password blank:false,nullable:false
    }

}

注意:您需要从.gsp页面传递'emailId'和'password'值。