【问题标题】:Grails data binding with command objectGrails 与命令对象的数据绑定
【发布时间】:2012-04-24 00:25:16
【问题描述】:

谁能向我解释一下 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 输入的发布请求。如果有人理解这种行为,请告诉我。

【问题讨论】:

  • 你找到问题了吗?

标签: data-binding grails command


【解决方案1】:

在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”和“密码”值。

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 2015-12-12
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多