Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在操作中使用VariableResolver? 概述_Java_Jsp_Struts2_El - Fatal编程技术网

Java 是否可以在操作中使用VariableResolver? 概述

Java 是否可以在操作中使用VariableResolver? 概述,java,jsp,struts2,el,Java,Jsp,Struts2,El,我有一个加载到侦听器上的属性文件,其中包含两个变量上的一些EL表达式: foo.path=${pageContext.request.contextPath}/foo bar.path=${application.realPath}/bar 我能够加载这个属性并解析它们所使用的JSP页面上的EL表达式,但是我也需要一个操作来解析它们。 我无法将这些属性放在操作上,因为该应用程序经过自定义,可以通过在系统知道的文件夹中提供属性文件来覆盖这些属性 到目前为止我做了什么 1。用于分析属性的Evalu

我有一个加载到侦听器上的属性文件,其中包含两个变量上的一些EL表达式:

foo.path=${pageContext.request.contextPath}/foo
bar.path=${application.realPath}/bar
我能够加载这个属性并解析它们所使用的JSP页面上的EL表达式,但是我也需要一个操作来解析它们。 我无法将这些属性放在操作上,因为该应用程序经过自定义,可以通过在系统知道的文件夹中提供属性文件来覆盖这些属性

到目前为止我做了什么 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;
  }
}
公共类MyExpressionEvaluator
{
私有页面上下文页面上下文;
公共MyExpressionEvaluator(PageContext PageContext)
{
this.pageContext=pageContext;
}
公共T求值(字符串表达式,类clazz)
{
T值=null;
ExpressionEvaluator=pageContext.getExpressionEvaluator();
VariableResolver VariableResolver=pageContext.getVariableResolver();
尝试
{
value=clazz.cast(evaluator.evaluate)(表达式,clazz,
variablesolver,null));
}
捕捉(电子例外e)
{
log.error(“计算表达式时出错”,e);
}
返回值;
}
}
2。在jsp脚本上调用函数:

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>
私有字符串buildConfigObject(配置配置,页面上下文,页面上下文){
//从属性检索JSON的Helper函数
StringBuilder configValue=parseConfig(conf);
MyExpressionEvaluator=新的MyExpressionEvaluator(页面上下文);
value=evaluator.evaluate(configValue.toString(),String.class);
返回值(value!=null)?值:configValue.toString();
}
var generatedContent=;

我不知道如何继续进行该操作,因为在这一点上我无法访问pageContext

版本
  • JSP:2.0
  • ServletAPI:3.0
  • JSTL:1.2.0
  • 支柱:2.1.6

考虑迁移到EL 3.0(Servlet 3.1,例如Tomcat 8等),这将使很多事情变得更简单。的确!它可以解决我的很多问题,但比我现在的问题需要更长的时间。所以,这不是目前最好的解决方案。@不过,您可以访问该请求。我如何从中创建表达式计算器?