Проверка, есть ли у тега Play тело - PullRequest
2 голосов
/ 23 февраля 2012

Из документов вы можете передать тело тегу следующим образом:

#{hello}Bob#{/hello}

и тело можно использовать через doBody:

Hello #{doBody /}!

но как вы можете проверить, было ли предоставлено тело?

Я хочу сделать что-то подобное в теге:

#{if hasBody()}
    #{doBody /}
#{/if}
#{else}
    &{'pages.' + _arg + '.name'}
#{/else}

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Если вы хотите сохранить свой тег в формате html / tag, вы можете использовать этот синтаксис

#{if (s = play.templates.JavaExtensions.toString(_body).trim()) != ''}
  it has a body! ${s}
#{/if}
#{else}
  no body!!!!
#{/else}

Другой вариант - использовать fastTags (см. это сообщение в блоге здесь). Там вы можете сделать то же самое

public static void _myTag(Map<?, ?> args, Closure body, PrintWriter out,  ExecutableTemplate template, int fromLine) {
  String s = JavaExtensions.toString(body);
  if (s.trim() != "" ) {
    //there is a body
  } else {
    // there is no body
  }
}
0 голосов
/ 24 февраля 2012

Кажется, что _body внутри тега if не похоже; это вызывает ошибку нулевого указателя. Я обошел вокруг, переместив его в Groovy блок, так что теперь мой шаблон выглядит так:

%{
body = _body == null ? null : play.templates.JavaExtensions.toString(_body).trim();
}%
#{if body}
    #{doBody /}
#{/if}
#{else}
    ...
#{/else}
...