使用IDEA编写jsp时EL表达式不起作用,可能是因为IDEA默认的jsp版本过高了,导致EL表达式无法正常解析。本文将分享如何解决此问题。
问题分析
在IDEA中编写jsp时,如果使用${}表达式时没有得到正确的结果,可以检查以下几个方面:
- 是否引入了正确的JSTL标签库并且使用正确的前缀。
- 是否在web.xml中配置了正确的JSP版本。
- 是否需要修改IDEA中jsp版本参数来与web.xml中的JSP版本保持一致。
解决方法
检查JSTL标签库
首先需要检查是否引入了正确的JSTL标签库,并且是否使用了正确的前缀。在jsp文件中应该添加以下内容:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
此外,如果要使用JSTL的格式化标签库,同样需要添加以下内容:
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
这样就可以在jsp文件中使用JSTL标签库中的方法,例如:
<c:out value="${user.name}" />
修改web.xml中JSP版本
其次,需要检查web.xml中是否配置了正确的JSP版本。在web.xml中可以配置如下:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>false</el-ignored>
<scripting-invalid>false</scripting-invalid>
<is-xml>false</is-xml>
<include-prelude>/WEB-INF/jsp/prelude.jspf</include-prelude>
<include-coda>/WEB-INF/jsp/coda.jspf</include-coda>
<page-encoding>UTF-8</page-encoding>
<is-erroneous>false</is-erroneous>
<default-content-type>text/html</default-content-type>
<buffer>16384</buffer>
<error-on-undeclared-namespace>false</error-on-undeclared-namespace>
<is-threadsafe>true</is-threadsafe>
<session>false</session>
<dynamic-attributes>true</dynamic-attributes>
<deferred-syntax-allowed-as-literal>false</deferred-syntax-allowed-as-literal>
<trim-directive-whitespaces>false</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
需要注意的是,el-ignored
这一项必须设置为false,才能够让EL表达式得到解析。另外,trim-directive-whitespaces
也需要设置为false。
修改IDEA中JSP版本参数
如果上述两种方法都无法解决问题,那么可能需要在IDEA中修改JSP版本参数。具体方法如下:
- 打开IDEA的Preferences窗口。
- 选择Build, Execution, Deployment > Build Tools > Maven > Importing。
- 在JSP Configuration中,勾选“Delegate IDE resolution to embedded application server”选项。
- 在JSP Version中选择与web.xml中配置相同的JSP版本。
按照以上步骤修改完后,再次运行项目,应当可以正常解析EL表达式了。
示例说明
在一个简单的jsp页面中,展示如何使用EL表达式来访问JavaBean中的属性:
<%--
Created by IntelliJ IDEA.
User: alexis
Date: 2019/6/13
Time: 5:12 PM
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to My Blog</h1>
<p>
${blog.name}:
<c:out value="${blog.description}" />
</p>
</body>
</html>
这个页面中通过EL表达式${blog.name}和${blog.description},来访问JavaBean对象Blog中的属性。
Blog类比较简单,仅包含了name和description两个属性:
public class Blog {
private String name;
private String description;
public Blog(String name, String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
在jsp页面中,需要使用JSTL标签库中的
通过以上方法,可以在IDEA中编写jsp页面时正常使用EL表达式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用IDEA编写jsp时EL表达式不起作用的问题及解决方法 - Python技术站