jsp -如何替换弃用的ExpressionEvaluator

gk7wooem  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(176)

我正在将一个应用程序移植到JBoss EAP 7.4,它仍然使用JSP。大多数页面工作正常,但是有一个页面给我带来了麻烦。这个页面使用了一个自定义的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处理其余的依赖项。
现在,此表达式求值器已弃用:

Deprecated. As of JSP 2.1, replaced by ExpressionFactory

ExpressionFactory是抽象的,不提供“eval”方法,所以我不知道如何替换它。应该如何替换它?如何修复此错误?
谢谢你。

xvw2m8pv

xvw2m8pv1#

我想我找到了解决办法:

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

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

相关问题