【问题标题】:How to programmatically evaluate EL in a managed bean如何以编程方式评估托管 bean 中的 EL
【发布时间】:2012-10-22 16:11:13
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: jsf el templating


    【解决方案1】:

    如果您位于 JSF 上下文中,则只需使用 Application#evaluateExpressionGet() 以编程方式计算包含 EL 表达式的字符串。

    String unevaluatedString = convertMailTemplateToStringSomehow();
    FacesContext context = FacesContext.getCurrentInstance();
    String evaluatedString = context.getApplication().evaluateExpressionGet(context, unevaluatedString, String.class);
    // ...
    

    如果您不在 JSF 上下文中,则需要使用独立的 EL API,例如 JUEL。或者,如果您已经使用 EL 3.0 并且字符串表示唯一的 EL 表达式,则使用 ELProcessor API。

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

    【讨论】:

    • 你知道是否可以使用接缝上下文吗?这样我就可以在模板中 DI 对象。类似blog.chintoju.com/2011/02/evaluate-an-el-expression.html
    • Seam 有一种简单的方法来评估带有嵌入 EL 表达式的模板:Interpolator.instance().interpolate() 方法接受一个字符串并插入它包含的任何 EL 表达式。此外,它还可以对您传递给插值器的多达 10 个参数进行插值:Interpolator.instance().interpolate("{0}#{' '}{1}", "foo", "bar"); 返回foo bar
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多