Tags 检查播放标签是否有正文

Tags 检查播放标签是否有正文,tags,playframework,conditional,Tags,Playframework,Conditional,从中,可以将主体传递给标记,如下所示: #{hello}Bob#{/hello} %{ body = _body == null ? null : play.templates.JavaExtensions.toString(_body).trim(); }% #{if body} #{doBody /} #{/if} #{else} ... #{/else} 车身可通过doBody使用: Hello #{doBody /}! 但你如何测试是否提供了尸体 我想在标签中做如下

从中,可以将主体传递给标记,如下所示:

#{hello}Bob#{/hello}
%{
body = _body == null ? null : play.templates.JavaExtensions.toString(_body).trim();
}%
#{if body}
    #{doBody /}
#{/if}
#{else}
    ...
#{/else}
车身可通过
doBody
使用:

Hello #{doBody /}!
但你如何测试是否提供了尸体

我想在标签中做如下操作:

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

有什么想法吗?

如果你想让你的标签保持html/标签格式,那么你可以使用这种语法

#{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
  }
}
publicstaticvoid\u myTag(映射参数、闭包体、PrintWriter输出、ExecutableTemplate模板、int fromLine){
字符串s=JavaExtensions.toString(body);
如果(s.trim()!=“”){
//有一具尸体
}否则{
//没有尸体
}
}

它似乎不喜欢
\u body
if
标签中;它会导致空指针错误。我将其移动到groovy块中,因此现在我的模板如下所示:

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

让我走上了正确的轨道,但我不得不重新安排一些事情——详细信息请参见我的答案。非常奇怪,我测试了它并正在工作。。。重要的是你已经把它整理好了