我创建了一个自定义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
返回布尔值?
答案 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
是您希望返回实际对象的方法/闭包的静态列表,并且不希望直接修改输出流。