如果消息属性代码确实存在,我想分支。
<g:if test="${message(code: 'default.code.foo')}">
true
</g:if><g:else>
false
</g:else>
如果有名为true
的邮件属性,则应回答default.code.foo
,如果没有,则回复false
。
它失败了,因为如果代码没有属性,它会回答代码。
答案 0 :(得分:7)
你能提供一个空白字符串的默认值吗?
<g:if test="${message(code: 'default.code.foo', default:'')}">
true
</g:if><g:else>
false
</g:else>
下等同于false
答案 1 :(得分:2)
那你为什么不测试返回的字符串是否是代码本身?
<g:if test="${message(code: 'default.code.foo') == 'default.code.foo'}">
true
</g:if><g:else>
false
</g:else>
如果您需要在多个地方执行此操作并希望使代码更简洁,则将此逻辑放在标记库中。
class MsgTagLib {
static namespace = 'msg'
def messageSource
private static final NO_ARGS = [].toArray();
def exists = {attrs ->
try {
messageSource.getMessage(attrs.code, NO_ARGS, Locale.default)
out << true
} catch (NoSuchMessageException e) {
out << false
}
}
}
然后您可以使用以下命令在GSP中调用此方法:
<msg:exists code="default.code.foo"/>
注意强>
exists
标记不支持参数化消息