【问题标题】:implement "create another like this" functionality in grails在 grails 中实现“创建另一个这样的”功能
【发布时间】:2014-06-10 14:45:36
【问题描述】:

在 grails 中保存域类的新实例后,我有一个“创建另一个这样的”按钮,它会打开另一个创建屏幕,其中的字段填充了我刚刚创建的实例的值。

在第一次尝试中,我将所有现有字段值作为参数传递到备用创建按钮中:

<g:link class="create" action="create"
    params="[app:volInstance.app.id,
             ass:volInstance.assessment.id,
             name:volInstance.volName,
             type:volInstance.volType.id,
             note:volInstance.volNote,
             recommendation:volInstance.recommendation,
             discovered:volInstance.dateFound,
             url:volInstance.urlParam]">
     Create Another like this
 </g:link>

然后在下一个create.gsp上做很多&lt;g:if&gt;看看参数是否存在。然后我将实例 ID 作为参数发送

<g:link class="create" action="create" 
        params="[vid:volInstance.id]">

并更改了控制器中的创建方法。这简化了事情(不再有一个巨大的参数列表):

    def create() {
      if (params.vid) {

        def id = params.vid
        def v = Vol.findById(id)

        params.volNote = v?.volNote
        params.volType = v?.volType
        etc......
      }
    respond new Vol(params)
   }

这很好用,消除了所有的&lt;g:if&gt;s,但仍然有很多行 params.x = v.x 有没有办法摆脱这些行并将对象作为参数传递?

【问题讨论】:

    标签: grails


    【解决方案1】:

    看起来是Command Object 的好地方。您可以在控制器中声明它,然后将其作为参数传递给您的操作。如果需要,您甚至可以添加验证。

    class MyCommand {
        Long id
        String volNote 
        String volType
    
        static constraints = { 
            volNote (blank: false) 
            //...
        } 
    }
    

    那么在你的行动中:

    def create(MyCommand cmd) {
        Long id = cmd.id
        //...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-09
      • 2016-12-07
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2021-11-23
      • 2011-02-26
      • 2022-07-28
      相关资源
      最近更新 更多