jsp - 如何替换已弃用的 ExpressionEvaluator

问题描述 投票:0回答:1

我正在将一个应用程序移植到仍然使用 JSP 的 JBoss EAP 7.4。大多数页面工作正常,但页面给我带来了麻烦。该页面使用链接到类的自定义 TLD 定义,该类扩展了

javax.servlet.jsp.tagext.TagSupport
;此类在 doEndTag() 方法中此时抛出 IllegalArgumentException,因为它无法将 String 转换为 Detail:

ExpressionEvaluator eval = pageContext.getExpressionEvaluator();
Object ob = eval.evaluate(detail, Detail.class, pageContext.getVariableResolver(), new FunctionMapper(){public Method resolveFunction(String arg0, String arg1){return null;}}); //Crashes here
dettaglio = (Detail)ob; //does not reach this

在我的依赖项中,我有 javax.servlet-api 版本 3.0.1(scope=provided),我让 JBoss 处理其余的依赖项。

现在这个 ExpressionEvaluator 已被弃用:

Deprecated. As of JSP 2.1, replaced by ExpressionFactory 

ExpressionFactory 是抽象的,不提供“eval”方法,所以我不知道如何替换它。应该如何更换?我该如何解决这个错误?

谢谢。

java jsp taglib
1个回答
0
投票

我想我找到了解决方法:

ExpressionFactory factory = JspFactory.getDefaultFactory().getJspApplicationContext(pageContext.getServletContext()).getExpressionFactory();
ValueExpression valueExp = factory.createValueExpression(pageContext.getELContext(), "${"+getDetail()+"}", Detail.class);
dettaglio = (Detail) valueExp.getValue(pageContext.getELContext());

其中“详细信息”是我的 JSP 页面中的属性。唯一的区别是我必须简单地在 JSP 中编写要解析的变量的名称,而不是使用 ${} 符号。

© www.soinside.com 2019 - 2024. All rights reserved.