ST4 テンプレート内に実行可能な Java コードを埋め込むことは可能ですか? たとえば、テンプレートに文字列を渡したい場合、文字列をそのまま印刷することもあれば、大文字で印刷することもあるため、Java コードで必要な変換を行う必要があります。この機能がなければ、同じ機能を実現する方法が 3 つあります。
(1) Java で代替値を事前に計算し、それらすべてを一度にテンプレートに渡します (ただし、これにより引数が多すぎる可能性があります)。
// in the below code, if the template can compute DESCRIPTION_CAPS from DESCRIPTION, using embedded java code, that reduces one argument
test(DESCRIPTION, DESCRIPTION_CAPS) ::= <<
this is original <DESCRIPTION>
this is caps <DESCRIPTION_CAPS>
>>
(2) そのような引数が多くなりすぎた場合、もう 1 つのオプションは、templpate を小さな部分に分割することですが、コードが見苦しく、読みにくくなります。
test1(DESCRIPTION) ::= <<
this is original <DESCRIPTION>
>>
test2(DESCRIPTION_CAPS) ::= <<
this is caps <DESCRIPTION_CAPS>
>>
(3) クラス内の関連するすべての値を事前に計算し、テンプレートに getter 関数を (引数なしで) 呼び出して、クラスから関連する値を単純に取得させます。
test() ::= <<
this is original <values.description>
this is caps <values.description_caps>
>>
現時点では (埋め込み Java クラスが利用できない場合)、3 番目のオプションが最適なソリューションのようです。より良い解決策が存在するかどうかアドバイスしてください。
注: 上記の例では、CAPS を例として使用していますが、より複雑な Java 関数も必要になる可能性があります。