activiti7 + springboot2 (十五) JSP页面使用EL表达式引起的错误解决

activiti7整合springboot2,启动服务访问有EL表达式的页面报错

java.lang.NoSuchMethodError: javax.el.ExpressionFactory.getStreamELResolver()Ljavax/el/ELResolver;

错误提示javax.el.ExpressionFactory没有getStreamELResolver方法,一般根据经验这应该是包冲突。

发现tomcat的tomcat-embed-el包javax.el.ExpressionFactory有getStreamELResolver方法,说明在编译的时候用到的不是这个包,可能是和Activiti7的EL的实现juel包有冲突。

我们首先排除juel的依赖

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>de.odysseus.juel</groupId>
                    <artifactId>juel-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>de.odysseus.juel</groupId>
                    <artifactId>juel-spi</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

重新运行还是报错,错误如下:

java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:70) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1186) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
    at javax.el.FactoryFinder.newInstance(FactoryFinder.java:83) ~[el-api-2.2.jar:na]
    at javax.el.FactoryFinder.find(FactoryFinder.java:193) ~[el-api-2.2.jar:na]
    at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:185) ~[el-api-2.2.jar:na]
    at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:156) ~[el-api-2.2.jar:na]
javax.el.ExpressionFactory.newInstance 实例化失败,找不到实现类com.sun.el.ExpressionFactoryImpl

那么我们引入el-api的实现

        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>el-impl</artifactId>
            <version>2.2</version>
        </dependency>

重新运行,问题解决。

EL是jsp的标准之一,但是从JSP2.1开始,EL Api从javax.el包中分离了出来,删除了对JSP相关类的依赖,这样就可以在Non-JSP环境中使用了。Activiti中的变量就是使用的EL表达式,javax.el.ExpressionFactory在tomcat的EL调用的是tomcat的org.apache.el.ExpressionFactoryImpl,而在Activiti7中的juel调用的是 de.odysseus.el.ExpressionFactoryImpl ,发生了冲突。

原文地址:https://www.cnblogs.com/zsg88/p/12334188.html

时间: 2024-10-14 05:18:28

activiti7 + springboot2 (十五) JSP页面使用EL表达式引起的错误解决的相关文章

———— JSP页面用EL表达式 输出date格式 ————

JSP页面用EL表达式 输出date格式 1.头上引入标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 2.使用: <fmt:formatDate value="${proje

JSP页面中EL表达式语言的使用详解

JavaBean在JSP中的局限 获取JavaBean属性必须要实例化 强制类型转化 <% Employee employee = (Employee)request.getAttribute("employee"); Computer comp = employee.getComputer(); String manufacturer = comp.getManufacturer(); %> 如果页面编写出现逻辑错误,将会导致代码执行错误,并且JSP页面编译页面时也会产生

JSP页面用EL表达式 输出date格式

1.头上引入标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 2.<fmt:formatDate value="${project.creatDate }" patt

SpringMVC返回数据给jsp页面(EL表达式取值)

第一种方式(通过request域) 通过request域返回字符串“resok”到success.jsp页面. @RequestMapping(value = "test") public String test( HttpServletRequest request) { request.setAttribute("res", "resok"); return "/pages/front/success.jsp"; } su

在JSP页面用EL表达式获取数据

<h4>获取域对象中的值</h4><%    request.setAttribute("name", "射雕英雄传");    application.setAttribute("name", "鹿鼎记");%>${requestScope.name } ${applicationScope.name } <h4>获取数组中的值</h4><%    Strin

jsp页面用el表达式获取枚举的code

<c:set var="D_BUSINESS" value="<%=DeptEnum.D_BUSINESS%>"/> otherType="${D_BUSINESS.code}"

解决JSP 不解析EL表达式

今天维护一个老项目,在jsp页面使用EL表达式获取数据的时候,没有被解析,而是原样输出了,很奇怪,查找资料验证后,得到结果,特记录如下 原因:在默认情况,Servlet 2.4 / JSP 2.0(以上)支持 EL 表达式. 解决的办法有两种: 1.修改web.xml的开头定义. 代码如下: <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http:/

JSP不支持EL表达式的解决方案

JSP不支持EL表达式的解决方案 EL的全称是Expression Language. 1.在默认情况下,Servlet 2.3 / JSP 1.2是不支持EL表达式的,而Servlet 2.4 / JSP 2.0支持. servlets 2.4这个版本的isELIgnored默认设置为false.所以使用web.xml里用web-app_2_4.xsd声明的时候在JSP页面不用特意声明.如何查看Servlet / JSP的版本?打开tomcat的common/lib 目录下,有两个JAR文件:

jsp页面使用el 按key获取map中的对应值

jsp页面使用el 按key获取map中的对应值 转自:<jsp页面使用el 按key获取map中的对应值>地址:http://blog.csdn.net/baple/article/details/18517359 jsp页面中的代码: <script type="text/javascript"> var msgTip = "${msgs['loginError']}"; alert(msgTip); </script> 注意