【问题标题】:Grails Databinding of Embedded Boolean嵌入式布尔值的 Grails 数据绑定
【发布时间】:2012-10-26 08:14:38
【问题描述】:

我对嵌入类中的布尔值的自动数据绑定有疑问。我为此创建了一个示例:

领域类:

class TestMe {

   TestEmbedded testEmbedded = new TestEmbedded()

   static embedded = ['testEmbedded']

   static constraints = {
   }
}

嵌入式类:

class TestEmbedded {

   String stringEmbedded = "test"
   Boolean booleanEmbedded = false
}

控制器:

class TestMeController {

    static scaffold = true
}

脚手架编辑和创建可以正确渲染输入。当我创建或编辑即时,嵌入的属性工作正常。只有一个问题。当我尝试将 TestMe.testEmbedded.booleanEmbedded 从真值编辑为假值(使用复选框)(其他方式轮编辑工作!)时,数据绑定不起作用。它是grails的错误吗?有什么好的解决办法吗?

【问题讨论】:

    标签: grails grails-2.0


    【解决方案1】:

    通过在控制器中打印参数来确保该字段在设置为 false 时实际被传递。您必须在控制器中创建一个虚拟更新方法来测试:

    class TestController {
    
        static scaffold = true
    
        def update() {
            params.each {
                printing it
            }
        }
    }
    

    标准 HTML 表单不会发送未选中的复选框;如果您使用g:checkBox

    ,Grails 会在复选框名称前创建一个带有下划线的隐藏变量(始终发送)来处理此问题

    如果表单没有使用g:checkBox,您可以手动创建隐藏变量或使用控制器中的逻辑处理它。查看生成页面的来源可能会有所帮助。

    希望这会有所帮助!

    【讨论】:

    • 我使用 g:checkBox 作为复选框,因此它使用下划线属性。问题正是 Grails 数据绑定在它是域类的属性时有效,但在它是嵌入式类的属性时无效。老实说,我不想改变控制器,我想把脚手架留在那里。有什么解决办法吗?:-)
    【解决方案2】:

    我为此创建了一个 Grails 问题,因为它似乎是 Grails 的一个错误。

    http://jira.grails.org/browse/GRAILS-9664

    【讨论】:

    • 同样的问题,真的很烦人。什么是解决方法?
    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 2023-03-19
    • 2018-01-17
    • 2023-03-14
    • 2021-06-22
    • 1970-01-01
    • 2018-03-01
    • 2010-10-02
    相关资源
    最近更新 更多