我在关联类中绑定布尔属性时遇到问题.如果我选中复选框(好),则属性设置为true,但如果未选中checbox ,则属性为null.
我知道HTML复选框的问题.我知道为什么在params中发送"_fieldName",但是这个"_fieldName"不会将我的boolean属性设置为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>
Run Code Online (Sandbox Code Playgroud)
如果我选中复选框:
[isHidden:on,title:a,_isHidden:]
println person.groups [0] // true
如果我没有选中复选框:
[title:a,_isHidden:]
println person.groups [0] // null
非常感谢您的帮助
汤姆
我很抱歉,我搜索了这个网站,但没有得到我的麻烦的实际信息.
经过多次黑客攻击后,答案显示,Grails正在寻找一个标记字段,其名称为:
groups[0]._isHidden
Run Code Online (Sandbox Code Playgroud)
而不是
_groups[0].isHidden
Run Code Online (Sandbox Code Playgroud)
这实际上是g:checkBox标签生成的内容.请参阅GrailsDataBinder.java:911,请参阅propertyStartsWithFieldMarkerPrefix(PropertyValue pv,String fieldMarkerPrefix)进行确认
如果您有兴趣,我已将此问题的测试项目上传到gitub.com
我更正了复选框标签.感谢gid帮助,现在它也与协会合作.
来自: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" ' }
Run Code Online (Sandbox Code Playgroud)
至:
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" ' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8947 次 |
| 最近记录: |