jsp - IllegalArgumentException:无法将类 java.lang.String 类型的 [我类中对象的字符串表示形式] 转换为类 [我的类]

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

我正在将一个古老的 WebLogic 应用程序迁移到 JBoss EAP 7.4。我有大量的 JSP 页面,其中一个页面出现错误:

[ServletException in:/path/of/my/page.jsp] java.lang.IllegalArgumentException: Cannot convert example.MyClass@4c0abc90 of type class java.lang.String to class example.MyClass'

(当然为了这个问题我会更改具体名称)

pom.xml:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.2.1</version>
        <scope>provided</scope>
    </dependency>

JSP行如下:

<myapp:mycustomtag detail="${variable1}" type="${class.variable.type}" view="${class.variable.view}" />

JSP 有一个自定义 TLD:

<%@ taglib uri="/tags/myapp-util" prefix="myapp" %>

...指向一个扩展

javax.servlet.jsp.tagext.TagSupport
并实现
doEndTag()
方法的类:

ExpressionEvaluator eval = pageContext.getExpressionEvaluator();
String mystr= (String)eval.evaluate(view, String.class, pageContext.getVariableResolver(), new FunctionMapper(){public Method resolveFunction(String arg0, String arg1){return null;}}); //this is a String and works fine      
MyClass myClass= (MyClass)eval.evaluate(detail, MyClass.class, pageContext.getVariableResolver(), new FunctionMapper(){public Method resolveFunction(String arg0, String arg1){return null;}}); //this throws the exception
    

据我了解,自定义 TLD 使得调用

MyClass
类来解析
myapp:mycustomtag
标记,这会导致调用
doEndTag
方法。我知道该应用程序是使用更旧版本的 javax.servlet.jsp 编写的,因为 Eclipse 告诉我
ExpressionEvaluator
已被弃用,eval 方法也是如此。我在网上找到的 javadoc 说
ExpressionEvaluator
被替换为
ExpressionFactory
但我不明白如何替换代码,因为
ExpressionFactory
没有 eval 方法,也没有
PageContext.getExpressionFactory()
方法。

我知道我正在尝试让古老的技术在 EAP 7.4 上运行……这有可能吗?经过数周的工作,应用程序的其余部分似乎可以正常工作。

java jsp taglib
© www.soinside.com 2019 - 2024. All rights reserved.