JSP EL表達式使用


以下是一些JSP EL基本用法,寫出來做個筆記,也可供大家參考交流。

一、EL表達式

EL在jsp中最基本的功能是取代諸如pageContext、request、session、application的對象的getAttribute()操作。

在jsp用運用EL可以簡化代碼,更加高效。

二、具體語法

Expression Language(EL)最先只能在jstl中用,后來才允許在jsp其他部分使用。

1、用於web層,也就是jsp

2、語法

a)       ${expr}

b)       不允許嵌套

c)       Bean的getter和 . 及 [] 操作

  1. . 操作 : 取得attribute的某個getter方法的返回值。
  2. [] 操作:作用和 . 操作一樣,但允許不規范的命名(比如有空格和點)

3、expr可以是:

a)       文字量

b)       Attribute

c)       <jsp:bean>定義的bean:實際也是attribute

d)       參數和cookie

e)       可以含有運算符

4、Implicit(隱含) Objects

a)       pageContext

b)       pageScope

c)       requestScope

d)       sessionScope

e)       applicationScope

f)        param

g)       paramValues

h)       header

i)        headerValues

j)        cookie

k)       initParam

b~e用來限定attribute的范圍,如果一個attribute沒指定范圍,那么有一個默認的由小到大的查找順序。

5、運算

a)       算術運算

  1. + - * /(或div)  %(或mod)

b)       關系運算符

  1. ==(或 eq)、!=(或 ne)、<(或 lt)、>;(或 gt)、<=(或 le)和 >;=(或 ge)

c)       邏輯運算符

  1. &&(或 and)、||(或 or)和 !(或 not)

d)    空驗證運算符  empty 

e)  條件運算 ?:

三、語法舉例說明

下面通過具體的例子說明如何使用EL表達式,首先我們定義一個User類

public class User {
    private int id;
    private String n;
    private String password;

    public User() {
        super();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return n;
    }

    public void setName(String name) {
        this.n = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
    public String toString(){
        return "id:"+id+" || name:"+n+" || password:"+password;
    }
}
<%
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getLocalPort()+ request.getContextPath() + "/";
    //EL無法直接使用java小腳本當中定義的變量
    pageContext.setAttribute("bp", basePath);
    User user = new User();
    user.setName("zhang3");
    user.setPassword("123");
    request.setAttribute("user4test", user);
%>

 

 

a)  ${expr}與算術運算的運用

     ${expr}它的意思是取出某一范圍中名稱為expr的變量。

 1 <body>
 2     <!-- 先在pageContext里找 user4test,沒有再找request  ... -->
 3     ${user4test}
 4     
 5     <%
 6         //Object obj=pageContext.getAttribute("user4test");
 7         //String name=((User)obj).getName();
 8         //out.print(name);
 9     %>
10     <%
11     //或者在jsp表達式中用: ((User)(pageContext.getAttribute("user4test"))).getName()
12     %>
13     <br /> ${user4test.name}<br />
14     
15     
16     <!-- 也可以直接指定scope -->
17     ${requestScope.user4test.name}//這里我們指定用requestScope
18     <br />
19     <!-- 如果找不到呢? -->
20     這里有一個隱形的el:${notExist}<br/>
21     這里有一個隱形的el(by jsp expression):<%=request.getAttribute("notExist") %>
22     <br />
23     
24     
25     <!-- 下面3個是常量 -->
26     ${"我愛中國"}
27     <br /> ${12345}
28     <br /> ${true}
29     <br />
30     
31     
32     <!-- 以下是運算符 -->  
33     <%
34         pageContext.setAttribute("three", new Integer(3));
35     %>
36     ${3==4||3==three}
37     <br /> ${user4test.password=="123"}
38     <br /> ${123=="123"} ${123=="234"}
39     <br />
40 
41     3+4="${3+4}"
42     <br /> ${3==three?"正確":"錯誤"}
43     <br />
44 </body>

結果如下:

 1 id:0 || name:zhang3 || password:123 
 2 zhang3
 3 zhang3 
 4 這里有一個隱形的el:
 5 這里有一個隱形的el(by jsp expression):null 
 6 我愛中國
 7 12345 
 8 true 
 9 true 
10 true 
11 true false 
12 3+4="7" 
13 正確 

特別需要我們注意的是當屬性擁有特殊字符時要使用[]:

1 <body>
2 無效的訪問形式:${user.test.name}<br/>
3 
4 ${requestScope["user.test"].name}<br/>
5 
6 注意:不能寫成{["user.test"].name},因為[]相當於點,不能寫成“.xxxxxx”,第一個點前面沒東西了。<br>
7 
8 </body>

結果如下:

1 無效的訪問形式:
2 zhang3
3 注意:不能寫成${["user.test"].name},因為[]相當於點,不能寫成“.xxxxxx”,第一個點前面沒東西了。

 

b)EL中empty的使用

1 <%
2     pageContext.setAttribute("str1","");
3     pageContext.setAttribute("str3",null);
4     pageContext.setAttribute("array",new String[]{});
5     pageContext.setAttribute("array1",new String[]{""});
6 %>
 1 <body>
 2 ${empty str1 }
 3 <br></br>
 4 ${empty str2 }
 5 <br></br>
 6 ${empty str3 }
 7 <br></br>
 8 ${empty array }
 9 <br></br>
10 ${empty array1 }
11 </body>

我們得到結果如下:

1 true 
2 
3  true 
4 
5  true 
6 
7  true 
8 
9  false 

c)EL中List的使用

<%
    List<String> list=new ArrayList<String>();
    list.add("litem1");
    String[] arr=new String[]{"String1"};
    Map<String,String> map=new HashMap<>();
    map.put("key1", "mitem1");
    pageContext.setAttribute("list", list);
    pageContext.setAttribute("map", map);
    pageContext.setAttribute("arr", arr);
    pageContext.setAttribute("k", "key1");
%>
<body>
<!-- 用[]運算,k被作為屬性查找 -->
${map[k]}<br/>
<!-- 用.運算,k被作為字符串的key,因為map中沒有鍵為“k”的項,所以此處沒有輸出 -->
${map.k}<br/>
${map["key1"]}<br/>
<!-- 一般用下面的形式 -->
${map.key1}<br/>
${list[0]}<br/>
${arr[0]}<br/>
</body>

得到結果如下:

1 mitem1
2  
3  mitem1
4  mitem1
5  litem1
6  String1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM