struts2_day04-存取数据的三种方式

前两篇博客讲述了前端是如何通过action将数据传递给后端的,以及后端是如何将数据封装处理的。这只是实现了前端数据的单向传递,(虽然我们之前学过的技术jsp(内置对象),servlet可以做到,但是略微有些麻烦),无法满足交互的性能,因此本片就拉开了后端向前端传递数据的序幕,强大的技术-值栈。
后端处理好数据之后,将数据封装到值栈中,前端可以通过值栈拿取数据。从而事件了前后端的交互。
代码能解释一切

  1. set方法 将数据放入值栈
    做法:
    - 获取ActionContext对象,
    ActionContext context = ActionContext.getContext();
    - 获取值栈对象
    ValueStack stack = context.getValueStack();
    - 调用set 方法
    stack.set(“uname”,“sofency”);//这样前端就可以通过struts标签库进行获取属性了
    前端

    <!--使用的s:property标签是引入的标签库
          具体的配置如下   在jsp的页面里面顶部引入
          <%@taglib uri="/struts-tags"  prefix="s"%> 
          <直接这样就可以 因为标签库已经被封装在ognl的jar包中了>
    -->
    <h1><s:property value="uname" /></h1><!--根据名字直接获取-->
    假如我们没有将数据放入值栈  我们可以这样写
    <h1><s:property value="#uname" /></h1>
    

    如下显示
    在这里插入图片描述

  2. 通过push方式
    前两步和上面一样 获取ActionContext对象,获取值栈对象
    第三步不一样
    stack.push("alice");//没有相应的属性描述
    stack.push("sofency");//没有相应的属性描述
    stack.push("hello");//没有相应的属性描述
    那么前端如何获取 类似于栈的先进后出 后进先出原则 一般不这样用

<s:property value="[0].top"/>栈顶
<s:property value="[1].top"/>
<s:property value="[2].top"/>

在这里插入图片描述

  1. 类似于模型驱动封装 不过只是针对于属性而言
package com.sofency.action;
import com.opensymphony.xwork2.ActionSupport;
public class ognlDemo extends ActionSupport{
	private String name;//1  设置全局属性
	public String getName() {//设置属性的get方法 前端会根据name调用getName()方法获取属性值
		return name;
	}
	@Override
	public String execute() throws Exception {
		name="sofency";//3.属性的赋值操作
		return "success";
	}
}

前端的数据获取
<h1><s:property value="#name"></s:property></h1> 和set方法一样根据属性名获取值

最后一种方法和前两种方法的区别
调用<s:debug><s:debug>在界面中
我们可以发现以下特点
push调用的值栈情况 新增三个java.lang.String的空间存储字符串
在这里插入图片描述
set方式 值栈的情况 set的底层是map 所以新增了HsahMap的值栈
在这里插入图片描述
而第三种方法值栈情况如下 那么属性存储在action里面
(上面两种方法action里面的name是我在jsp测试页面没有将调用他们的ognl给删除 实际不存在name属性)
在这里插入图片描述

综上所述 第三种方法 所操作的属性存储在action里面,而其他两种方法则会在值栈中新开辟空间存储数据,浪费空间,所以一般使用第三种方法进行传递数据

第三种方法不仅是针对属性,还可以是对象 和List集合存放方式雷同,下一篇博客讲述前端是如何取出值栈里面对象和List里面的数据的。

夜很静,我也该睡了,一直熬夜真是顶不住

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值