プロジェクトで JODReports (http://jodreports.sourceforge.net/) を使用してドキュメントを生成しています。問題は、'[#if...]' ディレクティブの 'AND' 論理演算にあります。例 (「.odt」テンプレート):
[#if entry1?? AND entry2??]bla bla[/#if]
「entry1」と「entry2」が存在し、それらがnullでない場合、これは「bla bla」を書き込む必要がありますが、テンプレートの解析中にエラーが発生します:
freemarker.core.ParseException: Encountered "AND" at line 4, column 30424 in content.xml.
Was expecting one of:
">" ...
"." ...
"[" ...
"(" ...
"?" ...
"!" ...
<TERMINATING_EXCLAM> ...
"??" ...
"+" ...
"-" ...
"*" ...
"/" ...
"%" ...
"!=" ...
"=" ...
"==" ...
">=" ...
<ESCAPED_GTE> ...
">" ...
<ESCAPED_GT> ...
<LESS_THAN_EQUALS> ...
<LESS_THAN> ...
".." ...
<AND> ...
<OR> ...
at freemarker.core.FMParser.generateParseException(FMParser.java:4697)
at freemarker.core.FMParser.jj_consume_token(FMParser.java:4568)
at freemarker.core.FMParser.If(FMParser.java:1171)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2372)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.List(FMParser.java:1257)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2375)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.Escape(FMParser.java:2302)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2445)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.Root(FMParser.java:2958)
at freemarker.template.Template.<init>(Template.java:149)
at freemarker.template.Template.<init>(Template.java:172)...
「AND」は予想されるステートメントのリストにあるため、これは奇妙です。次のようなテンプレートを変更します。
[#if (entry1??) AND (entry2??)]bla bla[/#if]
[#if entry1?? <AND> entry2??]bla bla[/#if]
[#if (entry1??) <AND> (entry2??)]bla bla[/#if]
[#if (entry1)?? AND (entry2)??]bla bla[/#if]
[#if entry1?? [AND] entry2??]bla bla[/#if]
[#if (entry1??) [AND] (entry2??)]bla bla[/#if]
も機能しません。「AND」の代わりに「&&」または「&」を使用すると、エラーが発生します。
freemarker.core.ParseException: Encountered ";" at line 4, column 30430 in content.xml.
Was expecting one of:
">" ...
"." ...
"[" ...
"(" ...
"?" ...
"!" ...
<TERMINATING_EXCLAM> ...
"??" ...
"+" ...
"-" ...
"*" ...
"/" ...
"%" ...
"!=" ...
"=" ...
"==" ...
">=" ...
<ESCAPED_GTE> ...
">" ...
<ESCAPED_GT> ...
<LESS_THAN_EQUALS> ...
<LESS_THAN> ...
".." ...
<AND> ...
<OR> ...
at freemarker.core.FMParser.generateParseException(FMParser.java:4697)
at freemarker.core.FMParser.jj_consume_token(FMParser.java:4568)
at freemarker.core.FMParser.If(FMParser.java:1171)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2372)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.List(FMParser.java:1257)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2375)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.Escape(FMParser.java:2302)...
もちろん、次のような '[#if]' ディレクティブを 2 つ書くこともできますが[#if entry1??][#if entry2??]bla bla[/#if][/#if]
、それはしたくありません。助言がありますか?
ありがとう、アレック