如何在Grails中使用HTML编码属性时如何正确验证域类?

时间:2013-07-28 13:59:33

标签: grails grails-2.0 grails-domain-class

我对表单输入字段使用html编码。我有一个表单来创建一个新的用户对象,其中一个可以为新用户插入一个名称。为防止脚本注入此输入字段,我在下面列出的save()操作中执行 encodeAsHTML()

问题: 1.输入的名称是:Schäfchen 2.在我的验证规则如下后,这将得到正确验证 3. html编码将ä转换为\ auml,这将无法通过验证

如何才能实现html编码中的名称将被正确验证?

给出以下Grails类:

class User {
  String name
  static constraints = {
    name blank: false, validator: { val, obj ->                     
                Pattern pattern = Pattern.compile("[a-zA-Z0-9äöüßÄÖÜ\\- ]+")
        pattern.matcher(val).matches()
    }
  }
}

在我的UserController.groovy中:

dev save() {
  def name = params?.name?.encodeAsHTML()
  def user = new User()
  user.name = name
  user.save()
}

1 个答案:

答案 0 :(得分:1)

您应该仅在GSP视图中使用encodeAsHTML()。

请参阅:http://grails.org/doc/latest/ref/Tags/each.html

<tbody>
 <g:each status="i" in="${itemList}" var="item">
  <!-- Alternate CSS classes for the rows. -->
  <tr class="${ (i % 2) == 0 ? 'a' : 'b'}">
   <td>${item.id?.encodeAsHTML()}</td>
   <td>${item.parentId?.encodeAsHTML()}</td>
   <td>${item.type?.encodeAsHTML()}</td>
   <td>${item.status?.encodeAsHTML()}</td>
 </tr>
 </g:each>
</tbody>