1. 程式人生 > >JSTL和EL表示式字串比較

JSTL和EL表示式字串比較

自己練習的時候,要比較sessionScope域中某值和requestScope域中某值是否相等,百度無果。就在自己馬上要放棄的時候,再一次除錯的時候發現了其中的端倪。

需求很簡單,使用者登入成功之後顯示資料庫中所有的使用者資訊,自己又給加了一個,就是在顯示的時候可以把這個剛剛登陸的使用者資訊加紅顯示,以便區分。

我把此登陸使用者的id儲存到了sessionScope中,key是theUserId。遍歷資料庫將裡邊的資料存放到ArrayList中,再把這個ArrayList儲存到requestScope中。在jsp介面遍歷此ArrayList,把每次遍歷到的UserId與存放在sessionScope中的theUserId

做比較,如果相等,就加紅顯示。問題也就出現在這裡!

先稍稍解釋一下jsp四大域物件和Servlet三大域,對於我這種菜鳥來說還是很容易分不清的。

jsp四大域物件與Servlet三大域物件

什麼是域物件?什麼是域?

域物件就是可以存取資料的物件,我們都知道JSP的九大內建物件,而只有四個物件稱為域物件,他們把資料都存放在各自的域(本質是Map)中
- pageContext(類javax.servlet.jsp.PageContext的例項)————————————>pageScope
- request(類javax.servlet.http.HttpServletRequest的例項)————————————>requestScope
- session(類javax.servlet.http.HttpSession的例項)————————————>sessionScope
- application(類javax.servlet.ServletContext的例項)————————————>applicationScope

而Servlet只有除pageContext之外的其他三個域物件,獲取方法如下
request直接可以得到,由tomcat伺服器作為值傳遞給server()方法供我們直接使用
session物件可以通過request.getSession()得到,HttpSession session = request.getSession();
最後一個application物件,ServletContext application = this.getServletContext();

這些域物件都有Object getAttribute(String para)void setAttribute(String para,Object obj)

兩個方法

要命的JSTL格式

格式:<c:if test="${ 比較內容 }"
值得注意的是這裡的 “${ 必須相連,中間不能有空格,後邊的 }” 也同樣不能分開

再看幾個小例子:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

EL表示式比較字串

和上面的例子類似,現在要迴圈 requestScope 中的 UsersList 依次和 sessionScope 中的 theUserId 做比較 ,重要程式碼如下:

c:if test語句比較字串內容相等

其他的JSTL標籤有些也同樣需要注意格式

如有錯誤歡迎指正!

世界真奇妙~~~