1. 程式人生 > >EL表示式的使用及示例

EL表示式的使用及示例

1.基礎介紹

在MVC體系結構中,JSP頁面只是用來顯示資料,但JSP指令碼中的表示式功能不夠強大,它不能直接對隱式物件中某物件的屬性進行顯示,需要配合Scriptlet才能顯示資料,很是麻煩,如果在JSP頁面中使用EL表示式將大大簡化JSP頁面中的Java程式碼,在配合JSP標準動作,JSTL,可達到真正的JSP無指令碼。 EL(Expression Language)表示式語言,語法:${表示式},例如:${"Beijing 2008"}則在JSP頁面輸出Beijing 2008,相當於JSP指令碼中的<%="Beijing 2008"%>,在EL表示式中的“'”和“"”功能是一樣的,表示一個字串;
在JSP頁面中我們可以禁用EL表示式,需要配置page指令的isELIgnored屬性,屬性值若為true則支援EL表示式,若為false則禁用表示式,預設情況下是支援EL表示式的。 在EL表示式中我們可以使用運算子以達到我們想要的結果,運算子按作用分為以下幾種: 1.算術運算子 + 注意:在EL表示式中的‘+’只有數學運算的功能,沒有連線符的功能,它會試著把運算子兩邊的運算元轉換為數值型別,進而進行數學加法運算,最後把結果輸出。若出現${'a'+'b'}則會出現異常。 例如:${6+6} - 例如:${4-3} * 例如:${4*3} / 例如:${9/3} 2.關係運算符 > 例如:${8>9}
>= 例如:${45>=9} < 例如:${4<9} <= 例如:${9<=8} == 例如:${4==4} != 例如:${4!=3} 3.邏輯運算子 && 例如:${false&&false} || 例如:${true||false} ! 例如:${!true}相當於${false} 4.三元運算子 ? : 例如:${3>2?'是':'不是'} 在EL表示式中還有一些特殊運算子: empty 判斷EL表示式中的表示式是否為空,例如:${empty sessionScope.user} . 是我們最常用的,作用相當於執行Bean中的
get方法。 例如:${sessionScope.user.userName}意思是:在會話中得到名稱為user的Bean物件,通過“.”運算子執行getUserName();方法,返回存放在Bean中的使用者名稱屬性的值。
[] 作用和“.”運算子的一樣,只不過[]運算子可以執行一些不規則的識別符號。 例如:${requestScope.user["score-math"]},這個表示式中有不規則的識別符號,是不能使用“.”來訪問的。
在EL表示式中為我們提供了許多內建物件,使我們很方便的得到我們想要的資料: 1.從隱式物件中得到資料: pageScope 例如:${pageScope.user.userName} 相當於<%=page.getAttribute("user").getUserName%> requestScope 例如:${requestScope.books} 相當於<%=request.getAttribute("books")%> sessionScope 例如:${sessionScope.lastURL} 相當於<%=session.getAttribute("lastURL")%> applicationScope 例如:${applicationScope.provice} 相當於<%=application.getAttribute("provice")%> 2.從請求頭中得到資料: header 例如:${header.referer}得到請求過來的URL 3.訪問JSP頁面中的內建物件: pageContext 例如:${pageContext.request}在EL表示式中我們是不能直接使用JSP頁面的內建物件,但可以是用pageContext間接得到這些內建物件,再來使用。

2.運算表示式

關係運算符 == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge )
邏輯運算子 && (或 and )、 || (或 or )和 ! (或 not )

3.使用ModelAndView傳遞引數到JSP頁面設定

Java程式碼:

@RequestMapping("/sq-condition/{type}")
	public ModelAndView sqCondition(@PathVariable(value="type") int type){
		Map<String,Object> validateMap=validateSession(sessionTimeOut);
		if(validateMap.get("SESSION_VALIDATED").toString().equals("false")){
			return new ModelAndView(sessionTimeOut);
		}
		ModelAndView mv=new ModelAndView("redirect:/pda/stock/sq-condition.html");
		mv.addObject("type", type);
		return mv;
	}

注:根據型別控制顯示不同條件。

JSP程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="com.wlyd.fmcgwms.util.ehcache.EhcacheUtil"%>
<%@page import="com.wlyd.fmcgwms.persistence.beans.EsUser"%>
<%@page import="com.wlyd.fmcgwms.util.finals.Const"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page isELIgnored="false" %>
<%
    String staticUrl = (String) EhcacheUtil.get("staticUrl");
    String webRoot = request.getContextPath();
    EsUser user = (EsUser) session.getAttribute(Const.SESSION_BACK_USER);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
<title>智慧倉庫管理系統</title>
<link rel="stylesheet" href="<%=staticUrl%>/pda/css/base.css">
<link rel="stylesheet" href="<%=staticUrl %>/pda/css/style.css">


</head>

<body>
${requestScope.type}<br/>
<%=request.getAttribute("type")%>
<c:if test="${requestScope.type eq 1}">
	<div class="header">
		庫存查詢-2
	</div>
	<ul class="ul-table">
		<li><span class="li-th"><em>*</em>數字倉管編碼:</span><div class="li-td"><input type="text"></div></li>
		<li><span class="li-th"><em>*</em>商品條碼:</span><div class="li-td"><input type="text"></div></li>
	</ul>
</c:if>

<c:if test="${requestScope.type eq 2}">
	<div class="header">
		庫存查詢-4
	</div>
	<ul class="ul-table">
		<li><span class="li-th"><em>*</em>數字倉管編碼:</span><div class="li-td"><input type="text"></div></li>
		<li><span class="li-th"><em>*</em>貨位條碼:</span><div class="li-td"><input type="text"></div></li>
	</ul>
</c:if>

</body>
</html>

效果圖: