<c:当test =“$ {action == view}”>从未在URL上评估为true?action = view </c:when>

时间:2013-10-11 16:50:48

标签: jsp jstl el

我有以下代码:

<%@ page language="java" session="true" contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<% 
request.setAttribute("action", request.getParameter("action"));
%>

<c:choose>
    <c:when test="${action == null}">
        NULL
    </c:when>
    <c:when test="${action == view}">
        VIEW
    </c:when>
</c:choose>

但是,当我使用?action=view传递网址时,它不显示VIEW

我哪里错了?

1 个答案:

答案 0 :(得分:2)

EL表达式${view}正在页面,请求,会话或应用程序范围内查找与该名称完全相同的属性,如${action}的工作方式。但是,您打算将其与字符串进行比较。然后,您应该使用引号使其成为真正的字符串变量,如${'view'}。它也可以在普通的Java代码中使用。

<c:choose>
    <c:when test="${action == null}">
        NULL
    </c:when>
    <c:when test="${action == 'view'}">
        VIEW
    </c:when>
</c:choose>

顺便说一句,使用 scriptlet 将请求参数复制为请求属性是笨拙的。 You should not be using scriptlets at all${param}地图已经提供了EL请求参数。

<c:choose>
    <c:when test="${param.action == null}">
        NULL
    </c:when>
    <c:when test="${param.action == 'view'}">
        VIEW
    </c:when>
</c:choose>

这样你就可以摆脱整个<% .. %>行。

另见: