【问题标题】:grails templates - scaffolding controllergrails 模板 - 脚手架控制器
【发布时间】:2012-04-09 18:18:37
【问题描述】:

我是 grails 的新手。我现在正在处理我的脚手架模板,尤其是在我的控制器上。每次生成它时我都想要一个定制的控制器,所以我使用了“安装模板”。我总是在控制器上创建一个 Command 对象,是否可以将域类中的字段包含到我生成的控制器中的命令对象中?我知道我必须在控制器模板中执行此操作,但我不知道如何对其进行编码,或者是否可能。所以每次我使用生成控制器时,命令对象上的字段都已经设置好了。

${className}Command implements java.io.Serializable{

    constraints = {}

} 

例如,我的 Domain 类如下所示:

class Person{

String name
int age
double height
}    

我希望它通过编辑控制器模板在我生成的控制器上的 Command 对象中自动生成我的域类的字段。可能吗?感谢您分享您的知识。

【问题讨论】:

    标签: templates grails groovy scaffolding


    【解决方案1】:

    edit.gspshow.gsplist.gsp 模板都有基于域类创建字段的逻辑,你可以在那里看到它是如何完成的。

    基本上,当您在模板中包含 groovy 代码时,您可以使用 domainClass 变量访问域类,然后您可以通过迭代 getProperties() 返回的数组来打印属性声明,如下所示:

    <%
        domainClass.properties.each {
            println "    ${it.type} ${it.name}"
        }
    %>
    

    【讨论】:

    • 谢谢!这个可行,我对其进行了一些修改以获得我真正想要的结果。通过使用您的代码输出 id this: class java.lang.String name 所以我所做的就是将 ${it.type} 更改为 ${it .type.simpleName}。感谢您提供额外的知识! :-)
    【解决方案2】:

    有趣的问题 - 为什么你认为你需要命令对象?这样你就违反了干原则。

    由于您刚刚开始使用 grails,因此您应该尝试使用 grails,因为它是被使用的,而不是尝试增强它。

    一旦您创建了第一个功能齐全的 grails 项目,您就会看到 grails 设计的美妙之处 - 无需隐式命令对象 :-) - 或者选择了另一个框架

    【讨论】:

    • +1 @Ralf 建议。命令应该有助于验证跨越多个域对象或在域对象之外的字段上完成的约束(如重复密码验证等),以保持域清洁......通过为每个控制器/生成命令对象/域对象,您最终会得到大量重复的代码,这些代码很快就会与您的模型不同步(或者您将添加两次字段 - 一次在模型中,一次在命令中)。
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2020-05-16
    • 2012-10-01
    • 2012-01-18
    • 1970-01-01
    • 2014-05-17
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多