2013-02-10 100 views
0

我是JSP和JSTL的新手,所以我可能在這裏做了一些非常愚蠢的事情。評估爲空字符串的EL表達式

我在我的webapps的lib目錄下有javax.servlet.jsp.jstl-api-1.2.1和javax.servlet.jsp.jstl-1.2.1。我在Tomcat7上運行。如果它有什麼區別,Eclipse正在啓動tomcat。我的項目是一個「動態Web項目」。

的web.xml看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
     <display-name>example</display-name> 
     <welcome-file-list> 
       <welcome-file>index.jsp</welcome-file> 
     </welcome-file-list> 
</web-app> 

的index.jsp看起來像這樣

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Example</title> 
</head> 
<body> 
    <% 
     String s = "Foo"; 
    %> 
    <c:out value="${s}" /> 
    <c:out value="Bar" /> 
</body> 
</html> 

我預計這將與Foo Bar上顯示的頁面。相反,它只顯示Bar。這發生在我所有的EL表達式中。我所有的EL表達似乎都是空的。

回答

1

我見過你的自我的答案,但是這不是正確的方式:

如果你已經使用JSTL與c:out無論如何避免使用scriptlets一起並取代

<% 
    request.setAttribute("s", "Foo"); 
%> 

與此:

<c:set var="s" value="Foo" scope="request"/> 

然後打印該值將是:

<c:out value="${requestScope.s}"/> 

或者乾脆${requestScope.s}因爲除非你需要花葶XML字符c:out標籤是不是真的有必要。

${s}也未嘗不可,因爲在所有範圍的cointainer搜索,直到找到第一次出現,但是,明確的書面方式是清潔IMO)

+0

[如果](http://docs.oracle.com/javaee /5/jstl/1.1/docs/tlddocs/c/out.html)你是否讀過''已棄用? – BalusC 2013-02-11 01:05:41

+0

@BalusC我會發誓我在某處讀過它,但找不到它,所以看起來我錯了。從答案中刪除了這個。 – 2013-02-11 12:24:02

0

這只是我不理解EL。

而不是

<% 
    String s = "Foo"; 
%> 

它應該是:

<% 
    request.setAttribute("s", "Foo"); 
%>