Grails复选框

时间:2010-05-30 06:38:27

标签: grails

我在关联类中绑定布尔属性时遇到问题。如果选中复选框(正常),则属性设置为 true ,如果未选中checbox,则属性设置为 null

我知道HTML复选框的问题。我知道为什么在params中发送“_fieldName”,但是这个“_fieldName”不会将我的布尔属性设置为 false

class Person{
   String title

   List<Group> groups = new ArrayList()
   static hasMany = [groups: Groups]    
}

class Group{
   String title
   Boolean isHidden

   static belongTo = Person
}

class PersonController{

   def form = {
      def person = new Person()
      person.groups.add( new Group() )    
      return ["person": person]
   }

   def handleForm = {
      def person = new Person( params )
      println person.groups[0]
   }
}


 <g:form action="save">
    <g:textField name="title" value="${person?.title}" />
    <g:textField name="groups[0].title" value="${person?.groups[0]?.title}"/> 
    <g:checkBox name="groups[0].isHidden" value="${person?.groups[0]?.isHidden}"  />   
    <g:submitButton name="save" value="Save" />
  </g:form>

如果我选中复选框:
[isHidden:on,title:a,_isHidden:]
println person.groups [0] // true

如果我不选中复选框:
[标题:a,_isHidden:]
println person.groups [0] // null



非常感谢你的帮助 汤姆
对不起,我搜索了这个网页,但没有得到我的麻烦的实际信息。

4 个答案:

答案 0 :(得分:5)

经过多次黑客攻击后,答案显示,Grails正在寻找名称为

的标记字段
groups[0]._isHidden

而不是

_groups[0].isHidden

实际上是g:checkBox标记生成的内容。请参阅GrailsDataBinder.java:911请参阅propertyStartsWithFieldMarkerPrefix(PropertyValue pv,String fieldMarkerPrefix)进行确认

如果您有兴趣,我已将此问题的测试项目上传到gitub.com

答案 1 :(得分:5)

我更正了复选框标记。感谢上帝的帮助,现在它也与协会合作。

来自消息来源:
http://grails.org/doc/latest/ref/Tags/checkBox.html#

 if (value == null) value = false

out << "<input type=\"hidden\" name=\"_${name}\" /><input type=\"checkbox\" name=\"${name}\" "

if (value && checked) { out << 'checked="checked" ' } 

为:

if (value == null) value = false

def begin =  name.lastIndexOf('.') +1
def tail =  name.substring( begin);
out << "<input type=\"hidden\" name=\"${name.replace(  tail, "_" + tail  )}\" /><input type=\"checkbox\" name=\"${name}\" "

if (value && checked) { out << 'checked="checked" ' } 

答案 2 :(得分:1)

使用以下代码

<g:checkBox name="checkbox" value="HELLO" />

参考:

  1. http://grails.asia/grails-checkbox-tag-example/
  2. http://grails.org/doc/latest/ref/Tags/checkBox.html

答案 3 :(得分:0)

将复选框的默认值设置为“false”,它应该解决问题。 希望能帮助到你。