检查Play标签是否有正文

时间:2012-02-23 17:25:47

标签: tags playframework conditional

docs,您可以将正文传递给这样的标记:

#{hello}Bob#{/hello}

可以通过doBody使用正文:

Hello #{doBody /}!

但你如何测试是否提供了身体?

我想在标签中做这样的事情:

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您希望将标记保留为html / tag格式,则可以使用此语法

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

您的另一个选择是使用fastTags(请参阅此处的this博文)。在那里你基本上可以做同样的事情

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
  }
}

答案 1 :(得分:0)

它似乎不喜欢_body标记内的if;它会导致空指针错误。我通过将它移动到一个groovy块中来解决,所以现在我的模板看起来像这样:

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