我有一个属性文件,它在一个监听器上加载,并在两个变量上包含一些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。