标签:port 声明变量 doctype 开发 prefix blog 属性 val exe
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="user.userName"/> 13 <s:property value="user.passWord"/> 14 <p>action中定义变量并生成get方法,来获取值栈中的数据(list集合)</p> 15 <s:iterator value="list"> 16 <s:property value="userName"/> 17 <s:property value="passWord"/> 18 </s:iterator> 19 <p>action中定义变量并生成get方法,来获取值栈中的数据(list集合另一种方式)</p> 20 <s:iterator value="list" var="user"> 21 <s:property value="#user.userName"/> 22 <s:property value="#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方法,这种方式往值栈中存放数据的方式更常用一点,因为平时前后台交互的时候大多是对象在交互,且可能是对象集合。
刚看了这么多,以后如果有新的认识会继续更新。
--------------------------------------------分割线---------------------------------------------
标签:port 声明变量 doctype 开发 prefix blog 属性 val exe
原文地址:http://www.cnblogs.com/ZT-SummerRain/p/7076607.html