首页 > 代码库 > struts2入门之OGNL

struts2入门之OGNL

OGNL是一个表达式语言,可以和EL表达式做类比,至于OGNL和struts2的关系,我想说的是,它们之间根本没有关系。之所以二者经常一起提起,是因为二者经常会一起用,struts2提供的标签中的属性里可以写ognl表达式,用于获取数据,这些数据既可以从域对象中获取,也可以从值栈中获取,这取决于你的数据是放在域对象中还是值栈中,下面贴出jsp页面获取值栈中的数据对象集合:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 pageEncoding="UTF-8"%>
 3 <%@ taglib uri="/struts-tags" prefix="s" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11 <p>action中定义变量并生成get方法,来获取值栈中的数据(对象)</p>
12 <s:property value="http://www.mamicode.com/user.userName"/>
13 <s:property value="http://www.mamicode.com/user.passWord"/>
14 <p>action中定义变量并生成get方法,来获取值栈中的数据(list集合)</p>
15 <s:iterator value="http://www.mamicode.com/list">
16 <s:property value="http://www.mamicode.com/userName"/>
17 <s:property value="http://www.mamicode.com/passWord"/>
18 </s:iterator>
19 <p>action中定义变量并生成get方法,来获取值栈中的数据(list集合另一种方式)</p>
20 <s:iterator value="http://www.mamicode.com/list" var="user">
21 <s:property value="http://www.mamicode.com/#user.userName"/>
22 <s:property value="http://www.mamicode.com/#user.passWord"/>
23 </s:iterator>
24 </body>
25 </html>

 

我的action代码如下,提供了存储对象集合到值栈中:

 1 package com.cczhao.struts.valuestack;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import com.cczhao.struts.entity.User;
 7 import com.opensymphony.xwork2.ActionContext;
 8 import com.opensymphony.xwork2.ActionSupport;
 9 import com.opensymphony.xwork2.util.ValueStack;
10 
11 /**
12  * 
13  * 功能: TODO 往值栈中存放数据.<br/>
14  * date: 2017年6月25日 下午12:05:55 <br/>
15  *
16  * @author cczhao
17  * @version
18  * @since JDK 1.8
19  */
20 public class ValueStack3Action extends ActionSupport {
21     private static final long serialVersionUID = 1L;
22     private User user = new User();
23     private User user2 = new User();
24     private List<User> list = new ArrayList<>();
25 
26     public List<User> getList() {
27         return list;
28     }
29 
30     public User getUser2() {
31         return user2;
32     }
33 
34     public User getUser() {
35         return user;
36     }
37 
38     // 方式3:通过在action中定义变量,并生成get方法
39     public String execute() throws Exception {
40         ActionContext context = ActionContext.getContext();
41         ValueStack stack = context.getValueStack();
42         
43         user.setPassWord("123456");
44         user.setUserName("曾柔");
45         user2.setPassWord("111");
46         user2.setUserName("双儿");
47         list.add(user);
48         list.add(user2);
49         return "success";
50     }
51 }

 

OGNL表达式语言结合struts2的标签进行使用能很好的用于获取后台的实体数据,上面的action只显示了一种往值栈中存放数据,然后在jsp中利用struts2标签+ognl来获取数据,其实往值栈中存放数据还有两种方式:set方式和push方式。但这两种方式占用空间较大,但是灵活度高点,可以斟酌使用,但在实际开发中我觉的在action中声明变量并生成get方法,这种方式往值栈中存放数据的方式更常用一点,因为平时前后台交互的时候大多是对象在交互,且可能是对象集合。

刚看了这么多,以后如果有新的认识会继续更新。

--------------------------------------------分割线---------------------------------------------

 

struts2入门之OGNL