天天看點

《Java從入門到放棄》JSP入門篇:EL和JSTL

EL即Expression Language(表達式語言),主要用來替代JSP頁面中用來做簡單運算和顯示的代碼。EL表達式可以用來顯示page、request、session和application中的資料。

EL表達式的文法非常簡單:

${  EL exprission },${  bean.name } 或  ${  bean['name'] }

案例:在頁面上顯示個人資訊。

《Java從入門到放棄》JSP入門篇:EL和JSTL

User類代碼如下:

package com.test.entity;

public class User {
	private String loginID;
	private String loginPWD;
	private String nickName;
	private String tel;
	
	public String getLoginID() {
		return loginID;
	}
	public void setLoginID(String loginID) {
		this.loginID = loginID;
	}
	public String getLoginPWD() {
		return loginPWD;
	}
	public void setLoginPWD(String loginPWD) {
		this.loginPWD = loginPWD;
	}
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	
	
}
           

index.jsp頁面代碼如下:

<body>
    <%
    	User user = new User();
    	user.setNickName("李大爺");
    	session.setAttribute("user", user);
    %>
    <p style="color:red;">${user.nickName }</p>
  </body>
           

運作效果:

《Java從入門到放棄》JSP入門篇:EL和JSTL

JSTL(JavaServerPages Standard Tag Library)是指JSP标準标簽庫。

使用JSTL的步驟:

1. 在JSP頁面添加JSTL引用。

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

2. 使用JSTL标簽。常用JSTL标簽有if标簽和forEach标簽。

if标簽用于判斷條件是否成,與Java中的If語句做用相同。其文法如下:

<c:if   test="codition"    var="name"    scope="applicationArea" >

</c:if>

屬性名 是否支援EL 屬性類型 描述
test true Boolean 決定是否處理标簽體的内容 
var false String 用于指定變量名,該變量用于儲存test屬性的判斷結果
scope false String 用于指定變量的有效範圍,預設值為page。可選值有page、request、session和application

案例:修改前一篇 文章中的需求,使用if标簽。

《Java從入門到放棄》JSP入門篇:EL和JSTL

之前使用的純JSP的代碼實作的登入前後的效果。使用if标簽實作,代碼如下:

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

  <body>
    <c:if test="${empty user}" var="loginState">
		<a href="#" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >登入</a>&nbsp;
		<a href="#" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >注冊</a>    
    </c:if>
    <c:if test="${!loginState }">
    	<a href='#'>${user.loginID }</a>
    </c:if>
   </body>
           

forEach标簽,用于實作對集合中對象的周遊。文法格式如下:

<c:forEach     items=collection         var=name    begin=start   end=end  step=count>

</forEach>

屬性名 是否支援EL 屬性類型 描述
var false Boolean 決定是否處理标簽體的内容 
item true 數組、字元串和集合類型 疊代的集合對象
varStatus false String 疊代的狀态,可以獲得疊代自身資訊
begin true int 如果指定begin屬性,則從item的下标為begin的位置開始疊代,如果沒有指定begin屬性,則從0下标開始疊代
end true int 如果指定end屬性,就在item的下标為end的位置結束疊代,如果沒有指定end屬性,将疊代到最後一個下标位置。疊代的步長預設為1
step true int

案例:在頁面上顯示所有歌手。

資料庫中的資訊如下:

《Java從入門到放棄》JSP入門篇:EL和JSTL

建立singerList.jsp頁面,代碼如下(可以自己建立集合,添加臨時資料,效果相同):

SingerService singerService = new SingerService();
List<Singer> list = singerService.selectAll();
session.setAttribute("singerList", list);
           
<body>
    <c:forEach items="${singerList }" var="singer" varStatus="status">
    	<p ${status.index%2==1?"style='background-color: #aa8a0c;'":"" }>${singer.singerName }&nbsp;&nbsp;${singer.birthday }</p>
    </c:forEach>
  </body>
           

運作結果如下:

《Java從入門到放棄》JSP入門篇:EL和JSTL