【问题标题】:grails create model from attrsgrails 从 attrs 创建模型
【发布时间】:2013-08-29 12:55:39
【问题描述】:

gsp 中,我将参数传递给 taglib,如下所示:

        <g:oneColumnSelect fieldName="gender" from="${['F', 'M']}"
                           valueMessagePrefix="applicant.gender"
                           value="${command?.gender}" noSelection="${['':'No answer...']}" />

taglib 中,我将参数分配给模型,然后将其传递给 gsp 模板,如下所示:

class FormsTagLib {

def oneColumnSelect = {attrs, body ->
    out << render(template:"/common/wizard/formselect",
            model:[
                    fieldName:attrs.fieldName,
                    from:attrs.from,
                    valueMessagePrefix:attrs.valueMessagePrefix,
                    optionValue:attrs.optionValue,
                    value:attrs.value,
                    noSelection:attrs.noSelection
            ])
}

我有许多这样的标记库,其中来自 gsp 的属性被复制到标记库中的模型以在模板中呈现。似乎应该有一种更简单的方法将 attr 字段复制到模型中,而不是一个一个地分配每个变量。

类似于“使用现有地图键作为键名从现有地图创建新地图,然后将原始地图值分配给新地图”。

有什么想法吗?只是将 attrs 传递给模板是行不通的。

【问题讨论】:

  • 所以render(template:"/common/wizard/formselect", model:attrs) 不起作用?你有错误吗?
  • 哇,是的。我已经学习 grails 3 周了,感谢您的帮助。
  • 酷 :-) 将其添加为答案。很高兴我能帮忙:-)

标签: grails groovy gsp


【解决方案1】:

只是打电话

 render(template:"/common/wizard/formselect", model:attrs)

应该这样做!玩得开心!

【讨论】:

    【解决方案2】:

    也许Map.putAll()可以帮到你:

    def first = [a: 1, b: 2]
    def second = [c:3]
    second.putAll(first)
    println second // prints [c:3, a:1, b:2]
    

    【讨论】:

    • second &lt;&lt; first,但我相信只需传递attrs,因为模型应该可以工作
    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2016-03-05
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多