彻底解决IDEA编写jsp时EL表达式不起作用的问题

我们用idea开发java web时常常会遇到jsp的EL表达式不起作用的问题。造成的该问题的因素的可能有很多,

1.有的是因为web.xml中的web-app只配置了<web-app>。。。。。。。。。。</web-app>,而没有在里面配置xlmn,xsi等内容,2.还有的可能是web-app的配置的version的版本过低,导致不支持EL表达式

3.也有的是没有导入相应的jstl的依赖包。。。。

统一解决方案是:

1.确保maven中添加了以下依赖:

   <!-- 添加jstl依赖,使其支持<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>jstl语法 -->
    <!-- jstl标签库相关 -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-jstlel</artifactId>
      <version>1.2.5</version>
    </dependency>

2.尽量将web-app的version版本设成最高,(例如2.3版本的web-app的 <el-ignored>true</el-ignored>默认设置就是true,忽略EL表达式,idea默认创建的jsp的格式是:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

</web-app>

我们需要将其改成如下格式)

目前我的是2.5的版本,它默认是支持jsp的EL表达式的。并且将web-app的配置写完整:我的文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">

<display-name>Archetype Created Web Application</display-name>
<!-- 配置前端控制器springmvc-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
     <url-pattern>*.action</url-pattern>
</servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

3.单个jsp设置其是否忽略EL表达式:(false表示支持,true表示不支持)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@page isELIgnored="false" %>

4.全局配置jsp支持EL表达式:

网上说在web.xml中加入以下代码即可:

<jsp-config>
        <jsp-property-group>
            <url-pattern>*</url-pattern>
            <el-ignored>false</el-ignored>
        </jsp-property-group>
</jsp-config>

但我测试,它并没有效果,无论 <el-ignored>false</el-ignored>是false,还是true,它最终都是false的效果,并且 <url-pattern>*.*</url-pattern>代码这样写还会报错,说路径无效,将其改成   <url-pattern>*.*</url-pattern>就可以了,但是不能解决问题啊,也许是高版本的web-app默认支持EL表达式,且不允许你全局更改其jsp的EL的设置吧。

5.如果还不行,那就是缓存的因素作怪了。尝试在maven的build节点下添加maven依赖:

    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

点击右侧的maven project,并执行clean maven,install maven操作,清楚缓存:

再点击rebuild project重构项目 ,然后打开chrome,按shift+ctrl+delete,清楚浏览器的缓存,经过彻底的缓存清理后,启动项目,检测EL表达式是否生效:检测代码是:index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--<%@page isELIgnored="false"%>--%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>EL表达式测试</title>
</head>
<body>
<c:if test="${3>2}">
    <p>yes</p>
</c:if>
</body>
</html>

如果页面显示yes,则支持,啥都没有,则不支持。

猜你喜欢

转载自blog.csdn.net/qq_41063141/article/details/83865943
今日推荐