想飞的程序员

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

OGNL表达式

       OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。

       OGNL 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了  java.utils.Map 的接口。 OgnlContext对象

  

  Struts框架默认就支持Ognl表达式语言。

    (struts必须引用的包:ognl.jar)

       作用:页面取值用。

  分析:

      El表达式语言,用于页面取值,jsp页面取值的标准。(默认直接可以使用) (应用范围更广。)

      Ognl表达式语言, struts标签默认支持的表达式语言。

                                       必须配置struts标签用,不能离开struts标签直接用。

OgnlContext对象:

1. Ognl表达式语言语言取值,取非根元素的值,必须用#号

 1 // OgnlContext用法
 2 public class OgnlDemo1 {
 3 
 4     /**
 5      * 1. Ognl表达式语言语言取值,取非根元素的值,必须用#号
 6      * @throws Exception
 7      */
 8     @Test
 9     public void testOgnl() throws Exception {
10         // 创建一个Ognl上下文对象
11         OgnlContext context = new OgnlContext();
12         // 放入数据
13         User user = new User();
14         user.setId(100);
15         user.setName("Jack");
16         // 【往非根元素放入数据, 取值的时候表达式要用"#"】
17         context.put("user", user);
18         
19         // 获取数据(map)
20         // 先构建一个Ognl表达式, 再解析表达式
21         Object ognl = Ognl.parseExpression("#user.name");
22         Object value = Ognl.getValue(ognl, context, context.getRoot());
23         
24         System.out.println(value);
25     }

2. Ognl表达式语言语言取值,取根元素的值,不用带#号

 1 public void testOgn2() throws Exception {
 2         // 创建一个Ognl上下文对象
 3         OgnlContext context = new OgnlContext();
 4         // 放入数据
 5         User user = new User();
 6         user.setId(100);
 7         user.setName("Jack");
 8         // 【往根元素放入数据】
 9         context.setRoot(user);
10         
11         // 获取数据(map)
12         // 先构建一个Ognl表达式, 再解析表达式
13         Object ognl = Ognl.parseExpression("address.province");
14         Object value = Ognl.getValue(ognl, context, context.getRoot());
15         
16         System.out.println(value);
17     }

3.Ognl对 静态方法调用的支持

 1 public void testOgn3() throws Exception {
 2         // 创建一个Ognl上下文对象
 3         OgnlContext context = new OgnlContext();
 4         
 5         // Ognl表单式语言,调用类的静态方法
 6         //Object ognl = Ognl.parseExpression("@Math@floor(10.9)");
 7         // 由于Math类在开发中比较常用,所以也可以这样写
 8         Object ognl = Ognl.parseExpression("@@floor(10.9)");
 9         Object value = Ognl.getValue(ognl, context, context.getRoot());
10         System.out.println(value);
11     }

struts的数据流转:

  1.从action中传递数据到jsp页面

             action:

              

 1 public class OgnlDemo3 extends ActionSupport{
 2     
 3     
 4     @Override
 5     public String execute() throws Exception {
 6         
 7         // 测试迭代标签
 8         
 9         List<User> list = new ArrayList<User>();
10         Map<Integer,User> map = new HashMap<Integer, User>();
11         
12         // 初始化
13         for (int i=1; i<11; i++) {
14             User user = new User(i,"Jack" + i);
15             
16             list.add(user);
17             map.put(user.getId(), user);
18         }
19         
20         // 保存  
21         ActionContext.getContext().getContextMap().put("list", list);
22         ActionContext.getContext().getContextMap().put("map", map);
23         
24         return super.execute();
25     }
26     
27     
28     
29 }

   jsp页面:

 

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@taglib uri="/struts-tags" prefix="s" %>
 3 
 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 5 <html>
 6   <head>
 7     <title>My JSP 'index.jsp' starting page</title>
 8     <meta http-equiv="pragma" content="no-cache">
 9     <meta http-equiv="cache-control" content="no-cache">
10     <meta http-equiv="expires" content="0">    
11     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
12     <meta http-equiv="description" content="This is my page">
13     <style type="text/css" >
14        .odd{
15                background-color: red; 
16               }
17        .even{
18                background-color:blue;}
19       </style>
20 
21   </head>
22   
23   <body>
24     <br/>一、. list迭代</br>
25     <table border="1">
26         <tr>
27             <td>编号</td>
28             <td>名称</td>
29         </tr>
30           <s:iterator var="user" value="#request.list" status="st">
31               <tr class=<s:property value="#st.even?'even':'odd'"/> >
32                   <td><s:property value="#user.id"/></td>
33                   <td><s:property value="#user.name"/></td>
34               </tr>
35           </s:iterator>
36       </table>
37       
38        <br/>二、迭代map</br>
39     <table border="1">
40         <tr>
41             <td>编号</td>
42             <td>名称</td>
43         </tr>
44           <s:iterator var="en" value="#request.map" status="st">
45               <tr>
46                   <td><s:property value="#en.key"/></td>
47                   <td><s:property value="#en.value.name"/></td>
48               </tr>
49           </s:iterator>
50       </table>
51       
52       
53       <!-- Ognl表达式可以取值,也可以动态构建集合 -->
54   </body>
55 </html>

 

posted on 2015-11-03 19:26  想飞的程序员  阅读(146)  评论(0编辑  收藏  举报