如何以编程方式评估托管bean中的EL

Luc*_*eni 3 jsf el templating

我想基于Seam/JSF为我的应用程序添加一个简单的模板语言,让用户自己编写电子邮件.

由于我不想创建新的解析器,我想使用统一表达式语言自己设置上下文.

我怎样才能做到这一点?

Bal*_*usC 8

如果您正坐在JSF上下文中,那么只需使用Application#evaluateExpressionGet()以编程方式评估包含EL表达式的字符串.

String unevaluatedString = convertMailTemplateToStringSomehow();
FacesContext context = FacesContext.getCurrentInstance();
String evaluatedString = context.getApplication().evaluateExpressionGet(context, unevaluatedString, String.class);
// ...
Run Code Online (Sandbox Code Playgroud)

如果您没有坐在JSF上下文中,那么您需要使用独立的EL API,例如JUEL.或者,如果您已经使用EL 3.0并且字符串代表唯一的EL表达式,那么请使用ELProcessorAPI.

ELProcessor el = new ELProcessor();
el.defineBean("bean", new Bean());
el.eval("bean.foo"); // Without starting #{ and ending } !
// ...
Run Code Online (Sandbox Code Playgroud)