如何在g中调用自定义函数:if test =“...”而不向模型提供它(或对象实例)?

时间:2011-06-10 07:54:33

标签: grails

背景

  1. 我有布局页面main.gsp
  2. 我需要有条件地显示或隐藏菜单项
  3. 通过查询数据库
  4. 完成条件评估
  5. 我不想扩充每个控制器,因此它将评估此条件并将结果放入模型
  6. 问题是: 我正在尝试做那样的事情

    <g:if test="${checkCondition()}"> some html here </g:if>
    

    但它没有说未定义的checkCondition。

    但这完美无缺:

    <mytaglib:checkCondition />
    

    问题是: 我该怎么做才能在

    中调用我的功能
    <g:if test="${ expression }">
    

2 个答案:

答案 0 :(得分:6)

由于您在命名空间('mytaglib')中有标记,因此您需要将其称为具有该命名空间的方法:

<g:if test="${mytaglib.checkCondition()}"> some html here </g:if>

答案 1 :(得分:1)

将checkCondition()作为静态方法移动到类中,并在gsp中导入此类。您还可以使用此方法定义服务类,并直接从您的gsp调用此serivce方法。 最清晰的解决方案是如您所述定义自己的taglib。在标记库中,您可以使用辅助方法注入服务bean,等等。

在你的taglib中你可以做类似

的事情
def checkCondition = { attrs ->
   // place your condition here
   if (session.user.id = 1) {
       // show menu
       out << "menu"
   }
}