Grails Acegi插件 - PersonController.groovy - 请解释一下!

时间:2009-05-26 21:04:27

标签: grails

person.properties = params做什么?

3 个答案:

答案 0 :(得分:2)

嗯,简短的回答是它将params映射中的任何键与person对象的属性匹配,将params映射中的值赋给匹配的属性。

示例:假设params.id = 156并且person有一个名为id的成员属性。在此次通话之后,person.id将等于156。

一些注意事项:

  • 如果有params中的键那么 与人物不匹配, 没关系,它不会做任何事情 与那些。
  • 如果有人在没有钥匙的情况下使用params?也 好吧,它也会跳过这些。
  • 这与通过“new”创建新Person非常相似 人(params)“或打电话 “bindData(person,params)”。

答案 1 :(得分:1)

Grails web site

的综合文档

在幕后,Groovy / Grails对象上的属性是域类属性的映射。 params对象也是请求参数的映射 - 基本上是HttpServletRequest对象的CGI参数。因此,赋值将使用params映射中的值更新属性映射,仅在它们匹配的位置。

如果你是用直接的Servlets& JSP本质上是你写的:

public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    Person person = new Person();
    person.firstName = request.getParameter('firstname');
    person.lastName =  request.getParameter('lastname');
    person.password = request.getParameter('password');
    ...
}

使用Grails,您基本上只需在PersonController.groovy中编写:

def save = {
        def person = new Person()
        person.properties = params
        ...
    }

因此,使用Grails,您不必过多担心参数名称是什么,因为您应该使用grails标记输出它们,然后使用params映射将它们返回到对象中。这可以减少误导参数名称时遇到的愚蠢错误。

您还可以向Person域对象添加更多属性,而不必编写更多getter / setter类型语句。

答案 2 :(得分:0)

它使用提供的请求参数更新person对象上的属性值。这称为数据绑定,并记录在案here