EL表示式的使用及示例
阿新 • • 發佈:2019-02-03
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>
效果圖: