OGNLにはeval関数がありません。
ですがどうしてもeval関数を使いたいシチュエーションが発生したので、作りました。
作ったとは言ってもeval関数そのものではなくて、代用品です。
暗黙ラムダ関数として定義してもよかったのですが、面倒だったので…(-_-)
やっていることは単純で、r42utilsの
public class SetLocal extends ContextBean { // 以上略 /* 追加コード ここから */ private boolean evalBody; /** * @param evalBody * evalBody */ public void setEvalBody(final boolean evalBody) { this.evalBody = evalBody; } /* 追加コード ここまで */ public boolean end(final Writer writer, final String body) { final Object o; if (this.value == null) { if (StringUtils.isEmpty(body)) { o = this.findValue("top"); } /* 追加コード ここから */ else if (this.evalBody) { o = this.findValue(body); } /* 追加コード ここまで */ else { o = body; } } else { try { o = this.findValue(this.value); } catch (final RuntimeException e) { throw new RuntimeException("value = " + this.value, e); } } // ---- final LocalVariableScope localVariableScope = this.getEnclosingLocalVariableScope(); localVariableScope.setVar(this.getVar(), o); return super.end(writer, ""); } // 以下略 }
上記のコードは、r42utils-0.1.7としてマージ済みです。