Как мне перейти, если message.properties-code существует - PullRequest
2 голосов
/ 02 июня 2010

Я хочу перейти, если код свойства сообщения существует или нет.

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

должен ответить true, если есть свойство сообщения с именами default.code.foo и false, если нет.

Сбой, потому что он отвечает коду, если для него нет свойства.

Ответы [ 2 ]

7 голосов
/ 02 июня 2010

Не можете ли вы указать по умолчанию пустую строку?

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

Это будет равно ложному в Groovy истина

2 голосов
/ 02 июня 2010

Тогда почему бы вам просто не проверить, является ли возвращенная строка самим кодом?

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

Если вам нужно сделать это в нескольких местах и ​​сделать код более лаконичным, поместите эту логику в тег lib.

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 в его форме выше не поддерживает параметризованные сообщения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...