OGNL表達式

OGNL表達式

OGNL的作用

  

OGNL的操作對象

 

      ValueStack:ValueStack中默認就是Action的對象,以及Action對象中的屬性。

     

      ActionCotnext上下文。

         A:Request作用域

         B:Session作用域

         C:Application作用域

         D:Parameter,Request的請求參數     

        

      Ognl表達式訪問或者定義不同對象時,需要用到不同的符號。

     

      無符號

    

      #     訪問ActionContext對象時,需要用到的符號。  

      {}    OGNL中用於定義集合時

      #{}    OGNL中用於定義Map

      %{}   OGNL中,將字符串轉義成OGNL表達式,並輸出轉化後的結果

      ${}    struts.xml中,獲取ValueStack裏成員變量的值。

1:OGNL表達式訪問成員變量與成員方法

   public int add(int x, int y) {

      System.out.println("調用到add這個成員方法");

      return x + y;

   }

 

   public String accessMember() throwsException {

      this.userBean = new UserBean();

      this.userBean.setUserid("1");

      this.userBean.setUsername("admin");

      return "succ";

   }

省略UserBean

Jsp:

      userBean = <s:property value="userBean"/>   

  

         userid = <s:property value="userBean.userid"/>

        

         username = <s:property value="userBean['username']"/>

        

         username = <s:property value="userBean.getUsername()"/>

        

         <s:property value="userBean.setUserid(222)"/>

        

         userid = <s:property value="userBean.userid"/>

        

   add = <s:property value="add(10,20)"/>

2:輸出靜態變量與靜態方法

public static final double PI = 3.1415;

 

   public static String getSystemTime() {

      Date date = new Date();

      DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

      return dateFormat.format(date);

   }

 

   public String accessStatic() throws Exception {

 

      return "succ";

   }

 

 

調用靜態方法前提:struts.xml中開啓常量 = struts.ognl.allowStaticMethodAcces


 Jsp:


   PI = <s:property value="@com.action.OgnlAction@PI"/>

  

   系統時間 = <s:property value="@com.action.OgnlAction@getSystemTime()"/>

3:輸出集合

private Map<String, Object> map;

   private List<UserBean> userList;

   private Set<String> strSet;

//省略set,get

public String accessCollection() throws Exception {

      /**

       * 集合初始化

       */

      this.strSet = new LinkedHashSet<String>();

      this.strSet.add("aa");

      this.strSet.add("bb");

      this.strSet.add("cc");

      this.strSet.add("dd");

 

      this.userList = new ArrayList<UserBean>(6);

      for (int i = 1; i <= 5; i++) {

         UserBean userBean = new UserBean();

         userBean.setUserid(String.valueOf(i));

         userBean.setUsername("用戶名_" + i);

 

         this.userList.add(userBean);

      }

 

      this.map = new LinkedHashMap<String,Object>();

      this.map.put("key_1", "value_1");

      this.map.put("key_2", OgnlAction.getSystemTime());

      this.map.put("key_3", this.strSet);

      this.map.put("key_4", this.userList);

      return "succ";

   }


 Jsp:       

 

strSet = <s:property value="strSet"/>

  

   大小Size = <s:property value="strSet.size()"/>

  

   刪除元素= <s:property value="strSet.remove('bb')"/>

  

   strSet = <s:property value="strSet"/>

  

  

   userList = <s:property value="userList"/>

  

   大小 = <s:property value="userList.size()"/>

  

   第2個用戶 = <s:property value="userList.get(1)"/>   username = <s:property value="userList.get(1).username"/>

  

   刪除元素 = <s:property value="userList.remove(2)"/>

  

   大小 = <s:property value="userList.size()"/>

  

   map = <s:property value="map"/>

  

   size = <s:property value="map.size()"/>

  

   key_1 = <s:property value="map.key_1"/>

  

   key_2 = <s:property value="map['key_2']"/>

  

   key_3 = <s:property value="map.get('key_3')"/>

  

   key_4 = <s:property value="map.key_4.get(1).username"/>

4:作用域與請求參數

public String accessScope() throws Exception {

      this.userList = new ArrayList<UserBean>(6);

      for (int i = 1; i <= 5; i++) {

         UserBean userBean = new UserBean();

         userBean.setUserid(String.valueOf(i));

         userBean.setUsername("用戶名_" + i);

 

         this.userList.add(userBean);

      }

 

      this.request.setAttribute("req_key", "Request作用域");

      this.session.setAttribute("session_key", this.userList);

      this.servletContext.setAttribute("app_key", OgnlAction.getSystemTime());

 

      // 1:第一種:後臺轉換的解決。

      // 頁面中使用param對象或者EL表達式,取出來仍然是亂碼。

      // String param_b =request.getParameter("param_b");

      // param_b = newString(param_b.getBytes("ISO-8859-1"), "UTF-8");

 

      // this.request.setAttribute("param_b_xx",param_b);

 

      // 2:第二種,改TomcatGETURL編碼

      // server.xml中配置。ConnectorconnectionTimeout="20000" port="8080"

      // protocol="HTTP/1.1"redirectPort="8443" URIEncoding="UTF-8"

 

      // 3:寫過濾器

 

      return "succ";

   }

 

Jsp:

 

req_key= <s:property value="#request.req_key"/>         ${requestScope.req_key}

  

   session_key = <s:property value="#session.session_key"/>

  

   app_key = <s:property value="#application.app_key"/>     ${applicationScope.app_key}

  

   請求參數 =

  

   param_a = <s:property value="#parameters.param_a"/>         ${param.param_a}

  

   param_b = <s:property value="#parameters.param_b"/>         ${param.param_b}

  

   param_b = <s:property value="#request.param_b_xx"/>

 

5:ValueStack與ActionContext 

publicString accessValueStack() throwsException {

      // ServletActionContext servletActionContext

 

      ActionContext context = ActionContext.getContext();

      context.put("context_key", "這是放到ActionContext中的值");

 

      /**

       * 操作ValueStack

       */

      ValueStack valueStack =context.getValueStack();

      /**

       *setValue只能設置Action中存在的屬性的值。

       */

      valueStack.setValue("xx", OgnlAction.getSystemTime());

     

      /**

       *set可以設置與增加Action中不存在的屬性的值。

       */

      valueStack.set("key_1", "value_1");

      valueStack.set("key_2", "value_2");

      valueStack.set("xx", "這是通過Set增加的");

  

     

     

      //valueStack.push(arg0);

 

      return "succ";

   }

 

 

context_key= <s:property value="#context_key"/>

  

   key_1 = <s:property value="key_1"/>

  

   key_2 = <s:property value="key_2"/>

  

   棧頂中的xx = <s:property value="xx"/>

  

   Action中屬性的XX = <s:property value="[1].xx"/> 通過下標的方式獲取棧中的元素。

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