2

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

4

1 回答 1

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' 值。

于 2014-12-02T11:05:33.253 回答