从Grails Tablib返回布尔值?

时间:2015-07-22 14:26:25

标签: grails gsp

我创建了一个自定义Grails tablib:

for x in range(0,l,1):
    esc=z[x]
    if (z[x]=="by" or z[x]=="the" or z[x]=="of"):
            esc=z[x+1]


    emp=emp+" "+esc


print emp

可以这样使用:

  def hasRole = { attrs, body ->
    boolean result = false 
    if (attrs.roles) {
      if (SpringSecurityUtils.ifAnyGranted(attrs.roles)) {
        result = true
      }
    }
    out << result  
  }

问题在于,比较总是导致${cust.hasRole(roles:'ROLE_ADMIN') ? 'yes' : 'no' } 。它接缝表达式未正确评估。

hasRole的返回类类型为yes

如何正确评估上述表达式,使org.codehaus.groovy.grails.web.util.StreamCharBuffer返回布尔值?

1 个答案:

答案 0 :(得分:5)

关键是在TagLib中使用returnObjectForTags。默认情况下,标记库将信息输出到输出编写器(out)。在你的情况下,你想做这样的事情:

package example

class FooTagLib {
  static namespace = 'something'
  static returnObjectForTags = ['hasRole']

  def hasRole = { attrs, body ->
    boolean result = false
    ...
    return result
  }
}

正如您所看到的,returnObjectForTags是您希望返回实际对象的方法/闭包的静态列表,并且不希望直接修改输出流。