EL表達式各種用法(原創筆記)

El常規用法:                2016年5月4日

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

.和[]等效 後者主要考慮到特殊符號的參數和動態獲取
${sessionScope.name}=${sessionScope["name"]}
${sessionScope.list[n]}
隨意一個變量,可從當前頁面尋找,page找不到,就會Request、session、application範圍尋找
jsp中內置對象名稱 El中
page pageScope
request requestScope
session sessionScope
application applicationScope
${範圍.變量名} 取出範圍內變量的值

El隱含對象

pageContext javax.servlet.ServletContext表示JSP的pageContext
pageScope page範圍的屬性名稱所對應的值
request requestScope範圍的屬性名稱所對應的值
session sessionScope範圍的屬性名稱所對應的值
application applicationScope範圍的屬性名稱所對應的值
param 同request.getParameter(String name)
paramValues 同getParameterValues(String name)回傳數組
header 同request.getHeader(String name)返回String類型的值
headerValues 同request.getHeaders(String name)回傳數組
cookie 同request.getCookies()
initParam 同request.getInitParameter(String name)


比較字符:

<||lt 小於
>||gt 大於
<=||le 小於等於
>=||ge 大於等於
==||eq 等於
!=||ne 不等於


13個標籤,功能分四類
表達式控制標籤:out、set、remove、catch
流程控制標籤:if、choose、when、otherwise
循環標籤:forEach、forTokens
URL操作標籤:import、url、redirect


out

<c:out value="hellow" />
  <%String s="hellow"; 
    request.setAttribute("s", s);
  %>
<c:out value="${s }" default="s" ></c:out>


set

<% User user=new User(); 
  request.setAttribute("user", user);
%>
<c:set target="${user }" property="uname" value="hello" />
<c:out value="${user.uname }" default="暫無"></c:out>


remove

msg=<c:out value="${msg }" default="null" /><br />
<c:set var="msg" value="hellow" scope="page" />
msg=<c:out value="${msg }" default="null" /><br />
<c:remove var="msg" scope="page"/>
msg=<c:out value="${msg }" default="null" /><br />
msg=null
msg=hellow
msg=null


catch

<c:catch var="error">
<!-- 容易異常部分 -->
</c:catch>
${error }


if

<c:if test="${1==1 }" var="name" scope="page">
  真纔出現啊
</c:if>
${name }


choose when otherwise

  <% session.setAttribute("score", 20); %>
<c:choose>
<c:when test="${score<60 }">不及格</c:when>
<c:when test="${score>60 }">及格</c:when>
<c:otherwise>剛好及格</c:otherwise>
</c:choose>


forEach

<% List<User> list=new ArrayList<User>(); 
     User u1=new User("s","d","f");
     User u2=new User("s","d","f");
     User u3=new User("s","d","f");
     User u4=new User("s","d","f");
     list.add(u1);
     list.add(u2);
     list.add(u3);
     list.add(u4);
     session.setAttribute("s", list);
  %>
//開始||結束||步長||狀態屬性
  <c:forEach var="s" items="${s }" begin="1" end="1" step="1" varStatus="a">
    ${s.uid }<br />
    ${s.uname }<br />
    ${s.upassword }<br />
    輸出行號(從0開始):${a.index }<br />
    輸出行號(從1開始):${a.count }<br />
    當前迭代的項   :${a.current }<br />
    判斷當前項是否爲第一項:${a.first }<br />
    判斷當前項是否爲第一項:${a.last }<br />
  </c:forEach>

Map

  <% Map map=new HashMap();
     map.put("k1", "v1");
     map.put("k2", "v2");
     session.setAttribute("s", map);
  %>
  <c:forEach var="s" items="${s }" varStatus="a">
    ${s.key }<br />
    ${s.value }<br />
  </c:forEach>


forTokens

//值||分隔符||狀態屬性
  <c:forTokens items="ww-wwwww-wwwww-wwww-wwwwww" delims="-" var="t" varStatus="a">
  ${t }<br />
  ${a.count }
  <br />
  </c:forTokens>


import

//導入頁面
<c:import url="/1.jsp" var="s"></c:import>
  ${s }


url

//路徑
<c:url value="/2/11.jsp"  scope="page" var="a22"></c:url>
<a href="${a22 }" >ww</a>


redirect

//重定向,一般和if一起使用
<c:redirect url="1.jsp"></c:redirect>//直接同目錄
<c:redirect context="/w" url="/1.jsp" ></c:redirect>
context最初的地方/w
出現它時候需要以/開頭、url也要以/開頭、最終會去/w/1.jsp






EL函數標籤:

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


fn:substring

<% session.setAttribute("w", "2006-11-12 11:22:22.0"); %>
原來得到的:${w}<br />
截取得到的:${fn:substring(w, 0, 16)}
原來得到的:2006-11-12 11:22:22.0
截取得到的:2006-11-12 11:22


fn:length

  <% 
  String[] w={"w","d"};
  session.setAttribute("w", w); %>
原來得到的:${w[0]}、${w[1]}<br />
數組的長度:${fn:length(w)}
原來得到的:w、d
截取得到的:2


fn:contains(string, substring)

<% session.setAttribute("w", "2006-11-12 11:22:22.0"); %>
原來得到的:${w}<br />
判斷得到的:${fn:contains(w, "2")}
原來得到的:2006-11-12 11:22:22.0
判斷得到的:true


  <% session.setAttribute("w", "2006-11-12 11:22:22.0"); %>
原來得到的:${w}<br />
判斷得到的:${fn:contains(w, "9")}
原來得到的:2006-11-12 11:22:22.0
判斷得到的:false


fn:containsIgnoreCase(string, substring)

假如參數string中包含參數substring(忽略大小寫),返回true


fn:endsWith(string, suffix)

假如參數 string 以參數suffix結尾,返回true


fn:escapeXml(string)

將有非凡意義的XML (和HTML)轉換爲對應的XML character entity code,並返回


fn:indexOf(string, substring)

返回參數substring在參數string中第一次出現的位置


fn:join(array, separator)

將一個給定的數組array用給定的間隔符separator串在一起,組成一個新的字符串並返回。


fn:length(item)

返回參數item中包含元素的數量。參數Item類型是數組、collection或者String。假如是String類型,返回值是String中的字符數。


fn:replace(string, before, after)

返回一個String對象。用參數after字符串替換參數string中所有出現參數before字符串的地方,並返回替換後的結果


fn:split(string, separator)

返回一個數組,以參數separator 爲分割符分割參數string,分割後的每一部分就是數組的一個元素


fn:startsWith(string, prefix)

假如參數string以參數prefix開頭,返回true


fn:substring(string, begin, end)

返回參數string部分字符串, 從參數begin開始到參數end位置,包括end位置的字符


fn:substringAfter(string, substring)

返回參數substring在參數string中後面的那一部分字符串


fn:substringBefore(string, substring)

返回參數substring在參數string中前面的那一部分字符串


fn:toLowerCase(string)

將參數string所有的字符變爲小寫,並將其返回


fn:toUpperCase(string)

將參數string所有的字符變爲大寫,並將其返回


fn:trim(string)

去除參數string 首尾的空格,並將其返回


截取字符串!使用!
<c:if test="${fn:length(onebeans.info)>100 }">${ fn:substring( onebeans.info ,0,100)} ...</c:if>
<c:if test="${fn:length(onebeans.info)<=100 }">${ onebeans.info }</c:if>




EL表達式語法: 
${ EL expression} 
其中: 
$表示EL表達式的開始。 
EL expression指定表達式。 


一、JSP EL表達式可用於如下幾種方式。 

1 靜態文本:包含EL表達式,其值在運行時計算出來。 
如: ${8+5} 


2 標準標籤和自定義標籤屬性:幫助顯示網頁上的動態內容。 
JSP提供一些標準標籤,<jsp:useBean>、<jsp:include>等。自定義標籤是由用戶使用taglib指令 編寫的。 
EL表達式可以作爲一個值傳遞給上述標籤的屬性。表達式在運行時計算,結果值將作爲屬性值進行傳遞。 
如: 
<% 
pageContext.setAttribute("color","#ffccff"); 
%> 
<body bgcolor="${pageScope.color}"> 
7+8=${7+8} 
</body> 


3 JavaBean與EL表達式:使用EL表達式可以簡潔地讀出JavaBean的屬性值。 
傳統的JSP通常使用如下方法訪問JavaBean: 
<jsp:getProperty name=”myBean” property=”name”/> 
<%=myBean.getName()%> 
EL表達式則簡化爲: 
${myBean.name} 


二、啓用/禁用EL表達式 

<%@ page isELIgnored=”true|false” %> 
爲true時,支持EL表達式計算。 
爲false時,不支持EL表達式計算。 


三、變量 

JSP表達式${product}的計算結果與調用pageContext.findAttribute(“product”)一樣,EL表達式 中的變量可以引用存儲在標準範圍(如:page request session application)中的屬性。 


點運算符(.)和”[]”用於獲取變量的值。 
如:a.identifier-b與expr-a[identifier-b]等價。 


四、隱式對象 

JSP隱式對象是一組標準的類。在JSP EL定義瞭如下隱式對象: 
1 pageContext:提供對頁面屬性的訪問。通過pageContext對象可以訪問和使用下列對象。 


2 request:表示接受的客戶端的JSP頁面請求。請求的信息可以使用request對象來訪問。 如:${pageContext.request.contextPath}返回請求的上下文路徑。 


3 param:返回將請求參數名映射至單個字符串值的值。如:${param[“name”]} 


4 paramValues:返回映射至客戶端的請求參數的一組值。 


5 pageScope:返回頁面範圍的變量名,這些名稱已映射至相應的值。 


6 requestScope:提供對請求對象的屬性的訪問權限。 


7 sessionScope:返回會話範圍內的變量名。 


8 applicationScope: 返順應用程序範圍內抽變量名。 
五、文字常量 
JSP表達式語言定義了下列文字常量: 
1 布爾型:true或false。 
2 整型:與Java中的整型相同。 
3 浮點型:與Java中的浮點型相同。 
4 字符串型:用單引號或雙引號引起。 
5 null:表示沒有值。0和空字符串表示的不是null值。 




六、運算符 
點運算符(.)和”[]”用於獲取變量的值。 
!或not                                布爾值取反 
empty                                 檢查空值 
*                                          乘法 
/或div                                 除法 
%或mod                           求餘數或取模 
+                                         加 
-                                          減 
<或lt                                  小於 
>或gt                                 大於 
<=或le                               小於等於 
>=或ge                             大於等於 
==或eq                             等於 
!=或ne                               不等於 
&&或and                          邏輯與 
||或 or                                邏輯或 
num1?num2:result        條件運算符 


=================================================================
[size=large]EL表達式 動態表格數據加序號 
<c:forEach var="zb" items="${list}" varStatus="index"> 
${index.count} 
</c:forEach> 


================================================================ 
定義頁面變量,自增 
<c:set value="0" var="i" scope="page"/> <c:forEach var="fb" items="${FB}" varStatus="index">      
<tr> <td width="10%" align="center"> 
<c:if test="${!empty fb.sfbz}"> 
<c:set value="${pageScope.i + 1}" var="i" scope="page"/> 
<c:out value="${pageScope.i }"/> 
</c:if>   
</td> <td width="40%"> 
${fb.xmmc} 
</td> 
<td width="40%"> 
${fb.sfbz} 
</td> 
</tr> 
</c:forEach> 
================================================================== 
格式化時間 
<fmt:formatDate value="${yxqjz}" pattern="yyyy-MM-dd" /> 
<fmt:formatDate value="${zxyprice.startdate2}" type="date" dateStyle="medium"/> 


==================================================================== 
跨行 
<c:if test="${status.index == 0}" > 
<td rowspan="${size}">1月</td> 
</c:if> 
===================================================================== 
<script type="text/javascript"> 
<!-- 
var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1"); 
TabbedPanels1.showPanel(${tabId}); 
//--> 
</script> 


<div id="TabbedPanels1" class="TabbedPanels"> 
<ul class="TabbedPanelsTabGroup"> 
<li class="TabbedPanelsTab" tabindex="0" style="font-size:12px;background-color:#DED465;"> 
工作計劃 
</li> 
</ul> 

</div>


原創筆記。若有錯誤,請及時告知

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章