如果存在message.properties-code,我该如何进行分支

时间:2010-06-02 13:19:57

标签: grails groovy internationalization

如果消息属性代码确实存在,我想分支。

<g:if test="${message(code: 'default.code.foo')}">
  true
</g:if><g:else>
 false
</g:else>
如果有名为true的邮件属性,则

应回答default.code.foo,如果没有,则回复false

它失败了,因为如果代码没有属性,它会回答代码。

2 个答案:

答案 0 :(得分:7)

你能提供一个空白字符串的默认值吗?

<g:if test="${message(code: 'default.code.foo', default:'')}">
  true
</g:if><g:else>
 false
</g:else>

这将在Groovy's truth

下等同于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"/>

注意

  1. 上面的标签lib是100%未经测试的,请注意!
  2. 上面表单中的exists标记不支持参数化消息