Return 来自 Grails Tablib 的布尔值?
Return Boolean value from Grails Tablib?
我创建了一个自定义的 Grails tablib:
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' }
问题是比较结果总是yes
。它认为表达式没有被正确评估。
返回的 class 类型的 hasRole 是 org.codehaus.groovy.grails.web.util.StreamCharBuffer
。
如何正确计算上述表达式,使 hasRole()
returns 成为布尔值?
关键在于在您的 TagLib 中使用 returnObjectForTags
。默认情况下,标记库将信息输出到输出编写器 (out
)。在你的情况下你想做这样的事情:
package example
class FooTagLib {
static namespace = 'something'
static returnObjectForTags = ['hasRole']
def hasRole = { attrs, body ->
boolean result = false
...
return result
}
}
如您所见,returnObjectForTags
是 methods/closures 的静态列表,您希望将其作为 return 实际对象,并且不希望直接修改输出流。
我创建了一个自定义的 Grails tablib:
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' }
问题是比较结果总是yes
。它认为表达式没有被正确评估。
返回的 class 类型的 hasRole 是 org.codehaus.groovy.grails.web.util.StreamCharBuffer
。
如何正确计算上述表达式,使 hasRole()
returns 成为布尔值?
关键在于在您的 TagLib 中使用 returnObjectForTags
。默认情况下,标记库将信息输出到输出编写器 (out
)。在你的情况下你想做这样的事情:
package example
class FooTagLib {
static namespace = 'something'
static returnObjectForTags = ['hasRole']
def hasRole = { attrs, body ->
boolean result = false
...
return result
}
}
如您所见,returnObjectForTags
是 methods/closures 的静态列表,您希望将其作为 return 实际对象,并且不希望直接修改输出流。