一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值

 特点:先进后出,最上面的元素叫做栈顶,也叫压栈。

 <s:debug></s:debug>可以看到栈的元素,栈的结构为root和context,root返回的结构是list集合,context返回的是map集合

二:action和servlet区别:

每次访问的action的时候,都会创建一个新的action对象,而servlet只会创建一个对象

注意:每次访问action都会创建一个action对象,action对象里面都且只有一个值栈的对象

三:值栈的对象:

ActionContext ac=ActionContext.getContext();

ValueStack v1=ac.getValueStack();

不常用,通常都是使用ognl表达式来取值,下面来讲几种实例,在此之前要先在jsp中导入标签库<%@ taglib prefix="s" uri="/struts-tags"%>

三:向值栈里面保存变量并取值

01):保存变量

private String name;

public String getName() {
return name;
}

@Override

public String execute() throws Exception {

name = "张三";

}

02):取值

<s:property value="name" />

四:向值栈里面保存对象并取值:

01):创建preson的类,实例化,得到get的方法

private Person person = new Person();

public Person getPerson() {
return person;
}

@Override

public String execute() throws Exception {

person.setName("张安");
person.setAge(1);
person.setSex("女");

}

02):取值(对象名.属性名):

<s:property value="person.name" />
<s:property value="person.age" />
<s:property value="person.sex" />

五:向值栈里保存集合并取值

01):实例化一个list集合

private List<Person> lp = new ArrayList<Person>();

public List<Person> getLp() {
return lp;
}

@Override

public String execute() throws Exception {

lp.add(new Person("李四",1,"男"));
lp.add(new Person("王五",2,"女"));

}

02):取值

    <!-- 取集合的值01 -->
<s:property value="lp[0].name" />
<s:property value="lp[1].name" />
<br>
<!-- 取集合的值02 -->
<s:iterator value="lp">
<s:property value="name" />
<s:property value="age" />
<s:property value="sex" />
<br>
</s:iterator>
<!-- 取集合的值03 加了var属性后就是从context里面取值,所以要加#号 -->
<s:iterator value="lp" var="l">
<s:property value="#l.name" />
<s:property value="#l.age" />
<s:property value="#l.sex" />
</s:iterator>

六:向值栈里添加域对象的值

01):向值栈里面添加

@Override

public String execute() throws Exception {

//域对象
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("abc", "域对象的值");
return SUCCESS;

}

02):取值

<s:property value="#request.abc" />

七:在form标签里面使用属性值:

<s:textfield  name="text"  value="%{name}"></s:textfield>(使用%{}就可以转)

八:form标签:

<!-- from标签 -->
<s:form action="" method="post">
<!-- 相当于text 文本框 -->
<s:textfield></s:textfield>
<!-- 密码框 -->
<s:password></s:password>
<!-- 单选框 必须有name属性值 -->
<s:radio list="#{'1':'男','2':'女'}" value="1" name=""></s:radio>
<!-- 多选框,name属性必须要 -->
<s:checkboxlist list="#{'1':'皮皮虾','2':'糖醋鱼','3':'炒年糕'}" value="1" name=""></s:checkboxlist>
<!-- 下拉框,用combox的话就会带一个文本框绑定value值 -->
<s:select list="#{'1':'皮皮虾','2':'糖醋鱼','3':'炒年糕'}" ></s:select>
<!-- 提交 -->
<s:submit></s:submit>
<!-- 重置 -->
<s:reset></s:reset>
</s:form>

效果图:

【基于初学者的SSH】struts2 值栈的详解与struts2标签库+ognl表达式的更多相关文章

  1. struts2值栈分析

    前段日子对ognl表达式不是很理解,看了几本书上关于ognl表达式的描述后还是感觉很难,前几天学习了struts2中值栈的内容,现在感觉ognl表达式其实很容易. struts2中利用值栈来存储数据, ...

  2. struts2值栈内部数据结构详解

    值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...

  3. Struts2值栈详解

    1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的.  2). ...

  4. Struts2 - 值栈(ValueStack)

    1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...

  5. struts2 值栈分析

    目录 一.值栈分为两个逻辑部分 二.Struts2 利用 s:property 标签和 OGNL表达式来读取值栈中的属性值 1.值栈中的属性值: 2.读取对象栈中对象的属性: 3.默认情况下,Acti ...

  6. Java中堆内存和栈内存详解2

    Java中堆内存和栈内存详解   Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,ja ...

  7. [转帖]SSH远程登录配置文件sshd_config详解

    SSH远程登录配置文件sshd_config详解 2016年06月02日 17:42:25 Field_Yang 阅读数 61386   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  8. Linux ssh登录和软件安装详解

    阿哲Style   Linux第一天 ssh登录和软件安装详解 Linux学习第一天 操作环境: Ubuntu 16.04 Win10系统,使用putty_V0.63 本身学习Linux就是想在服务器 ...

  9. SSH 连接慢的解决方案详解

    SSH 连接慢的解决方案详解 http://www.codeceo.com/article/ssh-slow.html

随机推荐

  1. 纯文本-FileOutputStream的解码方式

    1.通过string.getBytes(charsetNane)获得的字节数组,字节数组的编码方式,决定了FileOutStream写出文件的格式 例1:字节数组采用“GBK”编码,write生成的文 ...

  2. 1000. Minimum Cost to Merge Stones

    There are N piles of stones arranged in a row.  The i-th pile has stones[i] stones. A move consists ...

  3. poj1017----模拟

    题目大意: 现有1*1,2*2,3*3,4*4,5*5,6*6规格的产品若干个(高度都为h),问最少需要多少个 6*6*h的箱子把这些产品都装完 输入:每组测试数据共6个整数,分别代表1*1,...6 ...

  4. 带你走进php大马的结构模块编写之路

    本文原创作者:Laimooc 第一部分:前沿综述 本次我主要写了[文件的创建].[文件的删除].[文件的上传].[目录浏览].[命令执行]小模块,以及[组合的目录浏览和文件删除功能]的模块: 实验环境 ...

  5. 如何优雅的调戏XSS

    作者:i春秋作家——万年死宅 前言 这篇paper,我们将学习如何优雅的调戏XSS.我们会教大家一些不常用的,但很实用的XSS姿势.我们在正式进入主题之前,先来说一下,该篇paper将涉及的内容: 正 ...

  6. nginx请求频率限制模块ngx_http_limit_req_module

    模块: ngx_http_limit_req_module 作用: 限制客户端请求频率,防止恶意攻击 配置示例: http { limit_req_zone $binary_remote_addr z ...

  7. linux磁盘用满的两种情况

    首先查看分区的内存使用情况和inode使用情况 第一种情况,内存用完: 我们拿分区sdb5来做实验 查看内存使用情况和inode使用情况: 第二种情况:inode使用完 我们在该分区下创建很多空文件 ...

  8. git 删除 repository

    git 删除 repository 打开版本库,选择要删除的repository 点击Settings 找到删除选项 输入repository name,点击delet…… 删除本地仓库 执行git ...

  9. Swift 4.0 废弃的柯里化

    // 柯里化 // http://www.jianshu.com/p/6eaacadafa1a                               Swift 2.0 柯里化方法 (废弃) / ...

  10. 剑指offer四十六之孩子们的游戏(圆圈中最后剩下的数,约瑟夫环问题)

    一.题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...