<c:out>值属性未显示</c:out>

时间:2013-11-23 11:53:46

标签: jsp jstl el

我的JSP(下面的源代码)未显示value标记的<c:out>属性。根据以下代码,我的${param.username}正在被正确评估。使用请求参数?username=jeff访问JSP页面。

对于为什么有任何想法?我觉得我在这里缺少一些简单的东西。

下面的翻译/编译后的JSP,输出和源:

prac.jsp

<html xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <head><title>Practice JSP</title></head>
    <body>
        <h2>Practice JSP</h2>
        Username: <c:out value="${param.username}" default="No username"/><br/>
    </body>   
</html>

输出

Practice JSP
Username: 

来源(右键单击,从浏览器查看页面来源)

<html xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <head><title>Practice JSP</title></head>
    <body>
        <h2>Practice JSP</h2>
        Username: <c:out value="jeff" default="No username"/><br/>
    </body>   
</html>

2 个答案:

答案 0 :(得分:6)

下面,

<html xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns:c="http://java.sun.com/jsp/jstl/core">

您将taglib声明为XML命名空间,该命名空间仅适用于JSPX,而不适用于“普通的”JSP。既然你没有在问题的任何地方明确提到“JSPX”,即使不在文件扩展名中,我也认为你实际上使用的是“普通的”JSP。在这种情况下,XML命名空间不起作用。您需要通过<%@taglib%>声明taglib。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>

请注意,我删除了没有xmlns:jsp等效项的@taglib,因为JSP解析器已经隐式完成了这一点。与XML命名空间相反,您无需为http://java.sun.com/JSP/Page指定taglib。

或者,如果您确实打算使用JSPX,那么您应该将文件重命名为prac.jspx

另见:

答案 1 :(得分:2)

尝试使用:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

这将使jspl标签可用于您的jsp并解决您的问题。