【Struts2】【Struts2的OGNL表達式】

簡介

  1. el表達式${屬性}取值順序:request>>Context>>Root
  2. <s:XX>標籤下的action,直接使用action名即可,不需要上下文路徑和命名空間.
  3. <s:from>表單具有自動回寫功能.

1.通用標籤

1. 判斷

<s:if test="條件">執行體</s:if>

<!--num存於Context下的request中-->
<% request.setAttribute("num", 100); %>

<s:if test="#request.num>50">大於50</s:if>
<s:else>小於50</s:else>

2.循環

  • 自行循環(val=索引)
    <s:iterator begin="0" end="10" step="1" var="索引">
<!--循環輸出-->
<s:iterator begin="1" end="10" step="2" var="index">
        <s:property value="#index"/>
</s:iterator><br/>
<!--輸出1 3 5 7 9-->
  • 有值的循環(方式2 val=元素)
<% request.setAttribute("arr",new Integer[]{11,22,44,66,77}); %>
<!--方式1-->
<s:iterator begin="0" end="10" step="1" var="index">
    ${arr[index]}
</s:iterator><br/>
<!--方式2-->
<s:iterator value="#request.arr" var="val">
    <s:property value="#val"/>
</s:iterator>
<!--輸出11 22 44 66 77 -->

3.超鏈接

<s:a action="" namespace="">XXX</s:a>
1. namespace=命名空間
2. action=action名
3. 在超鏈接中加入<s:param>標籤,可以添加參數

<!--訪問 域名/上下文路徑/myPKG/123.action-->
<s:a action="123" namespace="myPKG">XXX</s:a>

<!--在網頁上輸出  XXXmyPKG/123.action -->
<s:url action="123" namespace="myPKG">XXX</s:url>

<!--添加參數 employee.id,值爲Content容器的#employee.id-->
<s:a action="XXX"><s:param name="employee.id" value="#employee.id"/>刪除</s:a>

2.表單標籤

  • 普通框
隱藏框:   <s:hidden name="XX" value="XX"/>
小文本框: <s:textfield name="XX" value="XX"/>
密碼框:   <s:password name="XXX"/>
大文本框: <s:textarea name="xxx"/>
提交框:   <s:submit name="xxx"/>
重置框:   <s:reset name="XXX"/>
  • 單選,複選,下拉
    • headerKey=”null” ;下拉框的默認值
    • headerValue=”請選擇”;下拉框的默認視圖
    • multiple=”true”;下拉框展開

方式1:傳入#{Key:Value, Key:Value} key等價於每個選項的id,value等價於每個選項的文本內容

單選框
<s:radio name="XXX" list="#{'1':'選項1','2':'選項2'}"></s:radio>
複選框
<s:checkboxlist name="XXX" list="#{'1':'選項1','2':'選項2'}"/>
下拉框
<s:select name="XXX" list="#{'1':'選項1','2':'選項2'}"/>

方式2:傳入一個list(且list中都是對象)

  • listKey=”id” :表示每個選項的id,是每個對象的id
  • listValue=”name”:表示每個選項的文本,是每個對象的文本

Action類響應發送一個list

        ActionContext ctx = ActionContext.getContext();
        List<Hobby> list =new ArrayList<>();
        list.add(new Hobby(1L, "籃球"));
        list.add(new Hobby(2L, "乒乓球"));
        list.add(new Hobby(3L, "足球"));
        list.add(new Hobby(4L, "排球"));
        ctx.put("list", list);

jsp

單選框
<s:radio name="XXXX" list="#list" listKey="id" listValue="name"/>
複選框
<s:checkboxlist name="XXXX" list="#list" listKey="id" listValue="name"/>
下拉框
<s:select name="XXXX" list="#list" listKey="id" listValue="name"/>

這裏寫圖片描述

3.自動回寫功能(將對象存入Root中)

  • Action類中傳遞對象
    • hobbys,複選框的內容(傳入Context)
    • jobs, 下拉框的內容(傳入Context)
    • user, 要回寫的對象(傳入Root)
//全局變量,將user對象傳入Root
    private User user=new User("Armo", 11, new Hobby(1L, "籃球"), "man", new Job(1L, "java"));
    public User getUser() {
        return user;
    }
//方法體
        //hobbys 
        List<Hobby> hobbys=new ArrayList<>();
        hobbys.add(new Hobby(1L, "籃球"));
        hobbys.add(new Hobby(2L, "足球"));
        //jobs
        List<Job> jobs=new ArrayList<>();
        jobs.add(new Job(1L, "java"));
        jobs.add(new Job(2L, "C++"));

        //放入Context
        ActionContext ctx = ActionContext.getContext();
        ctx.put("jobs", jobs);
        ctx.put("hobbys", hobbys);

JSP中
name=”屬性”

姓名:<s:textfield name="user.name"/></br>
年齡:<s:textfield name="user.age"/>
愛好:<s:checkboxlist name="user.hobby.id" list="#hobbys" listKey="id" listValue="name"/><br/>
性別:<s:radio name="user.sex"  list="#{'man':'男','girl':'女'}" ></s:radio><br/>
工作:<s:select name="user.job.id" list="#jobs" listKey="id" listValue="name"/>

顯示結果
這裏寫圖片描述

發佈了73 篇原創文章 · 獲贊 12 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章