gsp-тест grails оценивается как ложный, но блок все еще отображается. Почему?

Я сбит с толку оператором тестирования Grails.

Это выражение:

<g:if test="${!(preferences.displayOption.equals('ANA') || preferences.displayOption.equals('FLOP'))} ">
  ${!(preferences.displayOption.equals('ANA') || preferences.displayOption.equals('FLOP'))}
</g:if>

отпечатки

false

Как это может быть? Я печатаю точно такое же состояние, на которое проверяю!

хотя я уверен, что тестовое условие оценивается как «ложное», потому что оно печатает ложное в самой следующей строке, операторы внутри g:if обрабатываются.

Идеи Ану относительно того, что происходит.


person Community    schedule 12.05.2010    source источник
comment
Каково значение ${preferences.displayOption}? Это, конечно, строка, не так ли?   -  person armandino    schedule 12.05.2010


Ответы (2)


Я думаю, что проблема в конце пробела после последнего } в вашем тесте. Строка «ложь» оценивается как истина, тогда как «ложь» будет соответствующим образом интерпретироваться как ложь тегом if.

person Ben Williams    schedule 12.05.2010
comment
Спасибо! Мне не приходило в голову, что на самом деле он ищет строку false! Я подумал, что это всего лишь рендеринг .asString() логического значения. - person ; 12.05.2010
comment
Я только что потратил час, чтобы найти эту ошибку. Предыдущие версии работали должным образом, но обновление до версии 1.3.9 обнаружило эту ошибку. - person Scott Warren; 18.02.2013

Попробуйте убрать лишний пробел после закрывающего } в тестовом атрибуте. Вы можете просмотреть сгенерированный исходный код groovy, добавив «?showSource=true» к URL-адресу в режиме разработки. Дополнительное пространство приводит к созданию строки "false", которая оценивается как истинная.

person Lari Hotari    schedule 12.05.2010