在grails中使用带有输入:复选框的命令对象布尔值
这可能是一个可笑的简单问题,但我一直在努力解决它 我有一张表格:在grails中使用带有输入:复选框的命令对象布尔值,grails,command-objects,Grails,Command Objects,这可能是一个可笑的简单问题,但我一直在努力解决它 我有一张表格: . . . <g:form controller='somecontroller' action='someaction'> <g:textField name='name'/> <g:checkBox name='active'/> <g:submitButton name='save'/> </g:form> . . . 当我尝试访问控制器中
.
.
.
<g:form controller='somecontroller' action='someaction'>
<g:textField name='name'/>
<g:checkBox name='active'/>
<g:submitButton name='save'/>
</g:form>
.
.
.
当我尝试访问控制器中命令对象的活动属性时,它总是false。但是,名称属性正在正确填充。我已经尝试将值更改为true,还更改了${true}(如我在一些示例中所看到的),但似乎都没有效果。我做错了什么
编辑:如何绑定到控制器中的命令对象:
class MyController{
.
.
.
def save(MyCommandObject cmd){
// Do validation/error checking
def myDomainObject = new DomainObject()
myDomainObject.name = cmd.name
myDomainObject.active = cmd.active
// Do something with myDomainObject
}
}
我也尝试过这种风格:
def save = { MyCommandObject cmd ->
.
.
.
}
您所做的一切看起来都很好,我已经验证为在1.3.7和2.0.4中工作
请执行
grails clean
并重试。您如何绑定到控制器中的命令对象?您是对的-这应该而且通常很简单。我刚刚在Grails2.0.4上验证了这两种方法,在1.3.7上验证了第二种方法。当Iprintln cmd.active
完全按照您的要求执行时,正确打印true
或false
。您是否尝试过grails clean——不确定还可以尝试什么。只要您的实际表单有正确的控制器和操作,并且上面的演示表单没有显示任何打字错误,您所做的一切看起来都很好。@Kelly感谢您的调查。奇怪的是,所有其他字段都可以工作,而不是复选框/布尔字段。后续:我按照@Kelly的建议对grails进行了清理,从而纠正了这个问题。如果你想回答这个问题,我会接受的。谢谢!我在Grails2.1.1中遇到了同样的问题。将参数绑定到命令对象中的布尔成员始终会导致该成员为null。在GrailsClean(以及GGTS中的project clean)之后,一切都很好。也许太阳黑子太多了?看起来命令对象还是有点不成熟,即使是在2.2.0中。可能是3/4烤的;)是的,grails clean在2.2.4中也是必需的
def save = { MyCommandObject cmd ->
.
.
.
}