struts2值栈和OGNL操作

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
值栈
<a href="${pageContext.request.contextPath}/valueStackAction">值栈</a>
</body>
</html>

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!--  1. 局部结果配置-->
   <package name="default" extends="struts-default">      
       <!-- 配置值栈的Action -->
       <action name="valueStackAction" class="com.liuyongqi.struts2.action.ValueStackAction">
            <result>success.jsp</result>
       </action>
      
   </package>
  
</struts>

ValueStackAction

package com.liuyongqi.struts2.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.liuyongqi.struts2.entity.Users;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;

/**
 * 值栈的Action
 * @author Administrator
 *2018年7月17日下午2:11:51
 */
@SuppressWarnings("serial")
public class ValueStackAction extends ActionSupport{
	private String usersname;
	
	private Users user=new Users();
	
	private List<Users> list = new ArrayList<Users>();
	
	public String getUsersname() {
		return usersname;
	}
	
	public Users getUser() {
		return user;
	}
	
	public List<Users> getList() {
		return list;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
	//获取值栈对象
		System.out.println("sss");
		
		//三.在action中定义变量(或对象、集合),使用相应的get方法(推荐常用)
		//Step1:在action定义变量
		//Step2:生成变量的get方法
		//Step3:在执行方法里面为变量赋值
		usersname="admins";
		
		//四.使用上述方法向值栈中存放一个对象
		user.setUsername("liuyongqi");
		user.setPassword("888888");
		//五.使用上述方法向值栈中存放一个List集合
		for (int i = 0; i < 10; i++) {
			Users users = new Users("zs"+(i+1), "aaaaaaaaa"+(i+1));
			list.add(users);
		}		
		
		//1. 获取ActionContext类的对象
		ActionContext actionContext = ActionContext.getContext();
		//2. 调用ActionContext中的方法获取值栈对象
		ValueStack valueStack = actionContext.getValueStack();
		//往Action实例对象的值栈存入数据有三种方式:
		
		// 一.使用值栈对象中的set方法
		//Step1:在action中获取值栈对象;
		
		//Step2:调用值栈对象的set方法存值
		valueStack.set("name2", "liuyongqis");
		
		//二.使用值栈对象中的push方法
		//Step1:在action中获取值栈对象;
		
		//Step2:调用值栈对象的push方法存值。
		valueStack.push("aaaa");// 压栈操作,压入栈顶
		
		
		//ServletActionContext.getRequest().getSession().setAttribute("valueStack", valueStack);
		ServletActionContext.getRequest().getSession().setAttribute("name1", "bbbbbb");
		Map<String, Object> map = valueStack.getContext();
		System.out.println(map.entrySet());
		System.out.println("ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
		CompoundRoot root = valueStack.getRoot();
		System.out.println(root);
		return SUCCESS;
	}

}

成功页面success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>值栈</h1>
<s:debug></s:debug>
<br/>
<h1>OGNL的基本操作</h1>
<!-- 可以调方法,测试字符串'haha'的长度 -->
<s:property value="'haha'.length()"/>
<br/>
<h1>OGNL中#、%的使用	</h1>
<!-- 1.#使用:使用 # 来获取context里面的数据-->
#使用:使用 # 来获取context里面的数据<!--格式:#context的key名称.域对象名称-->
<br/>
<s:property value="#session.name1"/>
<br/>
<h1>%使用</h1>
如果直接在struts2表单标签里面使用OGNL表达式Struts2不能识别,需要在OGNL表达式前加%。
<br/>
<!--  错误的写法-->
<s:textfield name="nam1" value="#session.name1"></s:textfield>错误的写法<br/>
<!--  正确的写法-->
<s:textfield name="nam1" value="%{#session.name1}"></s:textfield>正确的写法

<!-- OGNL获取值栈中的数据-->
<h1>OGNL获取值栈中的数据</h1>
<h2>获取使用set方法存入值栈中的值</h2>
<s:property value="name2"/><br/>
<!--获取push方法设置的值-->
<h2>获取push方法设置的值</h2>
<s:property value="[0].top"/><br/>
<!--获取使用变量的get方法存入值栈中的值-->
<h2>获取使用变量的get方法存入值栈中的值</h2>
<!--  获取get方式存入值栈的字符串-->
<h3>获取get方式存入值栈的字符串</h3>
<s:property value="usersname" /><br/>
<!--获取get方式存入值栈的对象-->
<h3>获取get方式存入值栈的对象</h3>
<s:property value="%{user.username}"/>
<s:property value="user.password"/><br/>
<!-- (3)获取get方式存入值栈的集合 -->
<h3>获取get方式存入值栈的集合</h3>
<h4>获取list的值第一种方式</h4>
<s:property value="list[0].username"/>
<s:property value="list[0].password"/>
<br/>
<h4>获取list的值第二种方式</h4>
 <!-- 使用struts2标签 类似jstl的foreach标签
        s:iterator:遍历值栈的list集合
     -->
<s:iterator value="list">
	<s:property value="username"/>
	<s:property value="password"/>
<br/>
</s:iterator>
<br/>
<h4>获取list的值第三种方式</h4>
<!--  
遍历值栈list集合,得到每个user对象
            机制: 把每次遍历出来的user对象放到 context里面
            获取context里面数据特点:写ognl表达式,需要
            使用特殊符号 #
-->
<s:iterator value="list" var="user">
	<s:property value="#user.username"/>
	<s:property value="#user.password"/>
<br/>
</s:iterator>
</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银色亡灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值