がオブジェクトの属性である場合、jsr-223 が文字列を評価しないのはなぜですか?
String 属性が 1 つだけの単純なクラス:
public class EvalJSR223Bean {
public String evalFnt;
}
テキストとオブジェクトを使用した単純な評価であり、オブジェクトを使用する場合、Rhino は eval を実行しません。しかし、空の JavaScript 文字列をオブジェクト プロパティに連結すると、Rhino eval.
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("function f2() {println('EXECUTED!!!!!')}; function f1(source) { return eval(source); };");
String evalFnt = "(function(){f2();return '0';})();";
engine.put("evalFnt", evalFnt);
engine.eval("f1(evalFnt);"); // f2 is executed.
EvalJSR223Bean bean = new EvalJSR223Bean();
bean.evalFnt = evalFnt;
engine.put("bean1", bean.evalFnt);
engine.eval("f1(bean1.evalFnt);"); // Why does NOT executed f2 ?!!.
engine.put("bean", bean);
engine.eval("f1(bean.evalFnt);"); // Why does NOT executed f2 ?!!.
engine.put("bean", bean);
engine.eval("f1( ''+bean.evalFnt );"); // And if I concatenate a string, f2 is executed!!!
}