【问题标题】:createLink expression in <g:select> tag<g:select> 标签中的 createLink 表达式
【发布时间】:2011-07-28 10:14:32
【问题描述】:

Grails 新手 - 我正在尝试为我的选择标记中的值属性创建 URI(迭代域类的每个对象)。我尝试在我的标签中使用 createLink 标签,如下所示:

&lt;g:select name="project.id" from="${Project.list(sort:'start', order:'desc')}" optionValue="${createLink(controller:'project',action:'show')}/${it.id}" noSelection="['null': 'select project']/&gt;

显然我得到一个 GSP 异常,它解释了“/[mycontroller]/[myaction]/null”不是对象的属性。

是否有任何其他方法可以在 &lt;g:select&gt; 内构造这些 URI(例如 &lt;option value="/my/uri/"&gt; 而无需借助循环并“手动”构造值?

【问题讨论】:

  • 您确定需要将整个 url 存储为选择值吗?它通常通过使用 javascript 来完成,即获取选定的值,并构建结果 url。

标签: grails


【解决方案1】:

可以通过在项目域中添加额外的方法来轻松完成:

class Project {
   static transients = ['optionValue']

   String getOptionValue() {
       def g = ApplicationHolder.application.mainContext.getBean(
'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
       return g.createLink(controller:'project',action:'show', id: id)
   }

}

并将其用作:

<g:select name="project.id" from="${Project.list(sort:'start', order:'desc')}" optionValue="optionValue" noSelection="['null': 'select project']" />

【讨论】:

  • 太好了,谢谢!不幸的是,当我运行“g 不是项目的属性”时出现错误。这是在哪里/如何定义的,更重要的是,我在哪里可以找到一些关于如何覆盖内置 GSP 标签的文档?但是感谢您的提示!
  • def g = ApplicationHolder.getApplication().getMainContext().getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
  • @splix:很酷的想法 (+1) - 从来没有真正想过在域类中放置类似的东西。我宁愿使用 javascript 调用来处理这个问题,但它很有趣。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2013-03-06
  • 1970-01-01
相关资源
最近更新 更多