是否可以在Action中使用VariableResolver?

时间:2016-04-04 19:49:42

标签: java jsp struts2 el

概述

我有一个属性文件,它在一个监听器上加载,并在两个变量上包含一些EL表达式:

foo.path=${pageContext.request.contextPath}/foo
bar.path=${application.realPath}/bar

我能够加载这些属性并解析它们所使用的JSP页面上的EL表达式,但我还需要一个解决这些问题的操作。 我无法将这些属性放在Action上,因为应用程序已经过自定义,可以通过在系统知道的文件夹中提供属性文件来覆盖这些属性。

到目前为止我做了什么

1。 Evaluator类用于解析属性

public class MyExpressionEvaluator
{
  private PageContext pageContext;

  public MyExpressionEvaluator(PageContext pageContext)
  {
    this.pageContext = pageContext;
  }

  public <T extends Object> T evaluate(String expression, Class<T> clazz)
  {
    T value = null;

    ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
    VariableResolver variableResolver = pageContext.getVariableResolver();
    try
    {
      value = clazz.cast(evaluator.evaluate(expression, clazz,
          variableResolver, null));
    }
    catch (ELException e)
    {
      log.error("Error while evaluating expression", e);
    }

    return value;
  }
}

2。在jsp scriptlet上调用函数:

private String buildConfigObject(Configuration conf, PageContext pageContext) {
        // Helper function which retrieves a JSON from properties
        StringBuilder configValue = parseConfig(conf);

        MyExpressionEvaluator evaluator = new MyExpressionEvaluator(pageContext);
        value = evaluator.evaluate(configValue.toString(), String.class);

        return (value != null) ? value : configValue.toString();
}

<script type="text/javascript">
 var generatedContent = <%= buildConfigObject(conf, pageContext)%>;
</script>

我不知道如何继续操作,因为我无法访问该页面上的pageContext。

版本

  • JSP:2.0
  • Servlet API:3.0
  • JSTL:1.2.0
  • Struts:2.1.6

0 个答案:

没有答案