【基于初学者的SSH】struts2 值栈的详解与struts2标签库+ognl表达式
一:什么是值栈: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表达式的更多相关文章
- struts2值栈分析
前段日子对ognl表达式不是很理解,看了几本书上关于ognl表达式的描述后还是感觉很难,前几天学习了struts2中值栈的内容,现在感觉ognl表达式其实很容易. struts2中利用值栈来存储数据, ...
- struts2值栈内部数据结构详解
值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...
- Struts2值栈详解
1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...
- Struts2 - 值栈(ValueStack)
1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...
- struts2 值栈分析
目录 一.值栈分为两个逻辑部分 二.Struts2 利用 s:property 标签和 OGNL表达式来读取值栈中的属性值 1.值栈中的属性值: 2.读取对象栈中对象的属性: 3.默认情况下,Acti ...
- Java中堆内存和栈内存详解2
Java中堆内存和栈内存详解 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,ja ...
- [转帖]SSH远程登录配置文件sshd_config详解
SSH远程登录配置文件sshd_config详解 2016年06月02日 17:42:25 Field_Yang 阅读数 61386 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...
- Linux ssh登录和软件安装详解
阿哲Style Linux第一天 ssh登录和软件安装详解 Linux学习第一天 操作环境: Ubuntu 16.04 Win10系统,使用putty_V0.63 本身学习Linux就是想在服务器 ...
- SSH 连接慢的解决方案详解
SSH 连接慢的解决方案详解 http://www.codeceo.com/article/ssh-slow.html
随机推荐
- allowMultiQueries=true允许插入多条语句
在context.xml中,url写成url="jdbc:mysql://localhost:3306/fivecrowdsourcing?allowMultiQueries=true&qu ...
- 974. Subarray Sums Divisible by K
Given an array A of integers, return the number of (contiguous, non-empty) subarrays that have a sum ...
- 629. K Inverse Pairs Array
Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...
- 【7】JMicro微服务-服务路由,负载均衡
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1.关于服务路由和负载均衡 服务路由:根据预先配置好的策略,为客户端选择一个当前可用的服务提供者,根据策略选择一个可用的 ...
- 【apio2007】【ctsc2007】 数据备份 贪心+链表+堆
题目大意:有n个点,k条链,每个点离原点有一定的距离.要你用k条链连接2k个点,使得k条链的长度最短. 首先每次肯定是链相邻的2个点,所以我们先把相邻2个点的差值求出来,得到有n-1个数的数列. 然后 ...
- Vim实用技巧系列 - 搜索
最近发现了一个很好的VIM资源,best of vim tips, 展示了一系列很有用的vim 技巧.博主会逐个翻译介绍这些技巧. 来源: http://rayninfo.co.uk/vimtips. ...
- System.Thread.TImer控件——http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml
http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml
- liunx相关指令
修改网卡命名规范 a 如何进入到救援模式 修改网卡 1.修改配置文件名称 /etc/sysconfig/network-scripts/ 名称为:ifcfg-xxx 2.修改配置文件内的 dev ...
- zabbix 调用python脚本监控 磁盘剩余空间(创建模版,创建监控项,创建触发器)
主要 记录一下 使用zabbix 自己创建模版.监控项.触发器,并调用python脚本. 需求: 监控备份机磁盘剩余空间(windows系统) 一.安装zabbix_agent 比较简单 修改配置文 ...
- Aop学习笔记系列一
一.Aop解决了什么问题? 1.在说解决了什么问题之前,先介绍一些关键的知识点 a.功能需求:功能需求指项目中的增值需求,比如业务逻辑,UI,持久化(数据库). b.非功能需求:项目中次要的,但却不可 ...