使用 jstl <c:when> 标签未正确评估表达式
Using jstl <c:when> tag is not evaluating expression correctly
我正在尝试在以下代码中使用 c:choose 标记和 c:when jstl 标记,但未正确评估表达式。我有一个在会话范围内正确设置 bean Seller 的 servlet。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html lang="en">
<c:choose>
<c:when test="${not empty sessionScope.seller}">
<c:out value="${seller.firstName}"/>
</c:when>
<c:otherwise>
<c:out value="none"/>
</c:otherwise>
</c:choose>
</html>
servlet 代码如下:
package com.senachat.presentation;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.senachat.domain.Seller;
public class SenachatServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
Seller seller = new Seller();
seller.setFirstName("John");
HttpSession session = req.getSession();
session.setAttribute("seller", seller);
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
dispatcher.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
加载 index.jsp 页面时,打印值 "none" 而不是 firstName "John" 的值。我无法确定我在这里可能做错了什么?
经过进一步调查,我意识到表达式语言语句甚至没有被计算。
所以我在下面 link https://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
找到了文档
它提到 EL 对于 servlet 规范 2.3 及更早版本默认是禁用的。果然我在 web.xml
中声明了旧版本的 servlet 规范 2.3
我正在尝试在以下代码中使用 c:choose 标记和 c:when jstl 标记,但未正确评估表达式。我有一个在会话范围内正确设置 bean Seller 的 servlet。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html lang="en">
<c:choose>
<c:when test="${not empty sessionScope.seller}">
<c:out value="${seller.firstName}"/>
</c:when>
<c:otherwise>
<c:out value="none"/>
</c:otherwise>
</c:choose>
</html>
servlet 代码如下:
package com.senachat.presentation;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.senachat.domain.Seller;
public class SenachatServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
Seller seller = new Seller();
seller.setFirstName("John");
HttpSession session = req.getSession();
session.setAttribute("seller", seller);
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
dispatcher.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
加载 index.jsp 页面时,打印值 "none" 而不是 firstName "John" 的值。我无法确定我在这里可能做错了什么?
经过进一步调查,我意识到表达式语言语句甚至没有被计算。
所以我在下面 link https://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
找到了文档它提到 EL 对于 servlet 规范 2.3 及更早版本默认是禁用的。果然我在 web.xml
中声明了旧版本的 servlet 规范 2.3