我需要从一个Java bean类似这样叫SSJS 这个问题 。 问题是,我需要执行的代码来自一个配置文件,并可能看起来像:
getComponent("xxx").getValue();
我建立了一个版本,那么:
String compute = doc.getItemValueString("SSJSStuff");
String valueExpr = "#{javascript:" + compute + "}";
FacesContext fc = FacesContext.getCurrentInstance();
Application app = fc.getApplication();
ValueBinding vb = app.createValueBinding(valueExpr);
String vreslt = vb.getValue(fc).toString();
但我得到"Exception in xxx: com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript computed expression"
我想我接近,但我没有看到在山上..有什么想法?
这有几种可能:
- 变量计算为空
- 计算含有非法字符
- 内部计算的代码的格式不正确/不具有正确的语法
没有对象返回在SSJS代码:
如果您SSJS代码不返回的东西,vb.getValue(FC)返回null。 一个toString()将失败。 为了防止这种情况,你应该明确地投你回来的对象:
vreslt = (String) vb.getValue(fc);
希望这可以帮助
斯文
编辑 :
在重新阅读你的文章后,我看到你想要做一个getComponent在动态SSJS代码。 这不会增值到javax.faces.application.Application绑定工作。 对于这一点,你必须使用com.ibm.xsp.page.compiled.ExpressionEvaluatorImpl对象,而不是:
String valueExpr = "#{javascript:" + compute + "}";
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionEvaluatorImpl evaluator = new ExpressionEvaluatorImpl( fc );
ValueBinding vb = evaluator.createValueBinding( fc.getViewRoot(), valueExpr, null, null);
vreslt = (String) vb.getValue(fc);