Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

3.7. JSTL(JavaServer Pages Standard Tag Library)

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

3.7.1. c:set

設置變數

		
<c:set var="foo" scope="request" value="helloworld">

or

<%request.setAttribute("foo","helloworld") %>


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

3.7.1.1. c:remove

			
<c:remove var="message" scope="session" />
			
			

3.7.2. c:out

輸出變數variable的內容

		
<c:out value="${variable}"/>


<%=request.getParameter("UA")%>
相當於
<c:out value="${param.UA}"/>

預設值
<c:out value="${param.UA}" default="UA-69658002-1" />
		
		

3.7.3. c:url

生成URL

		
<c:url value="/news/china/"/>
		
		

3.7.4. c:redirect

		
<c:redirect url="/index.html"/>
<c:redirect url="http://www.netkiller.cn"/>		
		
		

3.7.5. c:import

		
<c:import url="http://www.netkiller.cn" />		

<c:import var="html" url="http://www.netkiller.cn"/>
<c:out value="${html}"/>	
		
		

傳遞GET參數

		
<c:import url="http://www.netkiller.cn" > 
	<c:param name="id" value="10" />
	<c:param name="name" value="neo" /> 
</c:import> 			
		
		

異常處理

		
<c:catch var="exception">

  <c:import url="ftp://ftp.example.com/package/README"/>

</c:catch>

<c:if test="${not empty exception}">

  Sorry, the remote content is not currently available.

</c:if>			
		
		

在Context間切換

		
server.conf: 
<Context  reloadable="true" crossContext="true" /> 

<c:import url="/path/to/file.jsp" context=/project1" /> 			
<c:import url="/path/to/file.jsp" context=/project2" />
		
		

3.7.6. c:if

		
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:if> Tag Example</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
   <p>My salary is: <c:out value="${salary}"/><p>
</c:if>
</body>
</html>	
		
		

3.7.6.1. boolean

			
<c:if test="${theBooleanVariable}">It's true!</c:if>
<c:if test="${not theBooleanVariable}">It's false!</c:if>
			
			

3.7.7. c:choose

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

<c:choose>
	<c:when test="${session.auth eq 'true' }">
		
	</c:when>
	<c:otherwise>
		
	</c:otherwise>
</c:choose>			
		
		

實現 if else/else if / else

		
<c:choose>
   <c:when test="${..}">...</c:when> <!-- if condition -->
   <c:when test="${..}">...</c:when> <!-- else if condition -->
   <c:otherwise>...</c:otherwise>    <!-- else condition -->
</c:choose>			
		
		

3.7.8. c:forEach

3.7.8.1. List 處理

			
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	${bookList}
	<br>

	<c:forEach items="${bookList}" var="node">
		<c:out value="${node}"></c:out><br>
	</c:forEach>

</body>
</html>
			
			

3.7.8.2. Map 處理

			
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<c:forEach items="${channel}" var="node">
		<a href="<c:out value="${node.value}"></c:out>"><c:out value="${node.key}"></c:out></a>
        <br/>
	</c:forEach>
</body>
</html>
			
			

3.7.9. empty 判斷是否為空

			
	<c:if test="${empty session.member }">

	</c:if>
			
			

3.7.10. JSTL fmt Tag setBundle Example

3.7.10.1. fmt:message

src/resources/config.properties

			
Name=Neo
Address=Shenzhen
Number=13322993040
			
			
			
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL fmt:setBundle Tag</title>
</head>
<body>
	<fmt:setBundle basename="resources.config" var="config" />
	<fmt:message key="Name" bundle="${config}" />

	<fmt:message key="Address" bundle="${config}" />

	<fmt:message key="Number" bundle="${config}" />
</body>
</html>
			
			
			
	<fmt:bundle basename="lang">
		<fmt:message key="Name" />
		<fmt:message key="Address" />
	</fmt:bundle>			
			
			
3.7.10.1.1. Language Package
				
<fmt:setLocale value="en" />				
				
				
3.7.10.1.2. fmt:message 變數
				
<fmt:message key="js" bundle="${config}" var="val" />
<c:out value="${val}"/>				
					
					

3.7.10.2. 

			
<fmt:setTimeZone value="Europe/London" scope="session"/>			
			
			
			
<fmt:formatDate value="${isoDate}" type="both"/>
2004-5-31 23:59:59

<fmt:formatDate value="${date}" type="date"/>
2004-4-1

<fmt:formatDate value="${isoDate}" type="time"/>
23:59:59

<fmt:formatDate value="${isoDate}" type="date" dateStyle="default"/>
2004-5-31

<fmt:formatDate value="${isoDate}" type="date" dateStyle="short"/>
04-5-31

<fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/>
2004-5-31

<fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/>
2004年5月31日

<fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/>
2004年5月31日 星期一

<fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/>
23:59:59

<fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/>
下午11:59

<fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/>
23:59:59

<fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/>
下午11時59分59秒

<fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/>
下午11時59分59秒 CDT

<fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/>
星期四, 四月 1, 2004 13:30:00 -0600

<fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz/>
31 五月 04, 11:59:59 下午 中央夏令時 

格式模式:
  d   月中的某一天。一位數的日期沒有前導零。    
  dd   月中的某一天。一位數的日期有一個前導零。    
  ddd   周中某天的縮寫名稱,在   AbbreviatedDayNames   中定義。    
  dddd   周中某天的完整名稱,在   DayNames   中定義。    
  M   月份數字。一位數的月份沒有前導零。    
  MM   月份數字。一位數的月份有一個前導零。    
  MMM   月份的縮寫名稱,在   AbbreviatedMonthNames   中定義。    
  MMMM   月份的完整名稱,在   MonthNames   中定義。    
  y   不包含紀元的年份。如果不包含紀元的年份小於   10,則顯示不具有前導零的年份。    
  yy   不包含紀元的年份。如果不包含紀元的年份小於   10,則顯示具有前導零的年份。    
  yyyy   包括紀元的四位數的年份。    
  gg   時期或紀元。如果要設置格式的日期不具有關聯的時期或紀元字元串,則忽略該模式。    
  h   12   小時制的小時。一位數的小時數沒有前導零。    
  hh   12   小時制的小時。一位數的小時數有前導零。    
  H   24   小時制的小時。一位數的小時數沒有前導零。    
  HH   24   小時制的小時。一位數的小時數有前導零。     
  m   分鐘。一位數的分鐘數沒有前導零。    
  mm   分鐘。一位數的分鐘數有一個前導零。    
  s   秒。一位數的秒數沒有前導零。    
  ss   秒。一位數的秒數有一個前導零。

<fmt:formatDate value="${xx}" pattern="dd/MM/yyyy HH:mm aa"/>和

<fmt:formatDate value="${xx}" pattern="dd/MM/yyyy hh:mm aa"/>  對於0點顯示的結果不一樣


<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="GMT"/>

<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="US/Eastern"/>