我的JQuery process.js文件无法解析JSP EL表达式。我只是想在JSP中显示一个List对象。如果我只是使用该${students}对象,它将正常工作并显示所有学生,但是如果我尝试使用JQuery显示该对象${students},它将仅在浏览器中显示该字符串。我已禁用脚本web.xml并使用EL来显示数据。
process.js
${students}
web.xml
还有其他方法可以解决吗?
浏览器输出:
Hello World from JQuery! From JSP: [Student{id=1, name=Jack}, Student{id=2, name=Jill}] From JQuery: ${students}
home.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script src="js/process.js"></script> </head> <body> <div id="mydiv"></div> <h2>From JSP: <p/> ${students}</h2> <h3>From JQuery: <div id="studentDiv"></div></h3> </body> </html>
$(document).ready(function () { //static message var msg = "Hello World from JQuery!"; $("#mydiv").text(msg); //dynamic message var students = '${students}'; $("#studentDiv").text(students); });
HomePageController.java
@WebServlet(name = "HomePageController", urlPatterns = {"/homePageController.do"}) public class HomePageController extends BaseController { private static final String VIEW_NAME = "/jsp/home.jsp"; @Override public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Student> students = getAllStudents(); request.setAttribute("students", students); request.getServletContext().getRequestDispatcher(VIEW_NAME).forward(request, response); } private List<Student> getAllStudents() { List<Student> students = new ArrayList<>(); Student student1 = new Student(1, "Jack"); Student student2 = new Student(2, "Jill"); students.add(student1); students.add(student2); System.out.println("students = " + students); return students; } }
BaseController.java
public abstract class BaseController extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } public abstract void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- Disable scripting --> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
EL表达式仅由JspServlet(*.jsp)和FacesServlet(*.xhtml)求值。但是,.js默认情况下,文件不是由那些servlet处理的,而是由容器的内置默认servlet处理的。这不是jQuery的错。这只是你的错
JspServlet
*.jsp
FacesServlet
*.xhtml
.js
一个快速的技巧是向映射添加*.jsURL模式JspServlet。确定容器的内置名称JspServlet(在Tomcat和克隆中)后jsp,将以下条目添加到您的webapp的web.xml:
*.js
jsp
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>
替代方法是:
$.getJSON()
data
$.data()