Struts2 04--- 值栈 ognl(S标签)
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。中文名是对象图导航语言,我们通常叫做S标签。
那么,怎么在一个jsp页面中导S标签呢?只要在jsp页面的顶部写上这行代码:<%@ taglib uri="/struts-tags" prefix="s"%>,就可以将S标签导入页面中使用了。
Struts 2默认的表达式语言是OGNL。OGNL既可以取值,又可以作为页面标签使用。
首先简单介绍一下常用的OGNL页面标签:
form表单<s:form>
文本框:<s:textfield></s:textfield>
多行文本:<s:textarea></s:textarea>
密码框:<s:password></s:password>
下拉框:<s:select list="#{1:'请选择',2:'吃饭',3:'睡觉'}" name="select"></s:select>
下拉框:<s:combobox list="#{1:'请选择',2:'吃饭',3:'睡觉'}" name="下拉框" ></s:combobox>
单选框:<s:radio list="#{1:'打豆豆',2:'吃饭',3:'睡觉'}" name="单选框" value="1"></s:radio>
多选框:<s:checkboxlist list="#{1:'打豆豆',2:'吃饭',3:'睡觉'}" name="多选框" value="2"></s:checkboxlist>
</s:form>
标签在form表单里使用会自动换行,多选框也有另一种复杂一点的写法。但是ONGL不会作为常用的页面标签,因为我们一般写页面都有html的标签。
那么,既然它不会作为页面标签被我们常用,就来讲一下它的另一种用法,取值:它常用来获取值栈里面的值。
既然说到值栈,那么先简单介绍一下值栈。
值栈是struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值。存储在action对象中,每次访问action都会创建一个action对象,action对象里面有且只有一个值栈的对象。
值栈的存值形式分为两种,一种是保存在content中,结果是map集合。另一种是保存在root中,结果是list集合。我们常用的是root。值栈有一个最大的特点就是先进后出,存在于最顶端的值可称为栈顶元素,上一个元素和下一个元素之间的关系可称为压栈。
获取值栈对象:ActionContext actionContext = ActionContext.getContext();
ValueStack stack1 = actionContext.getValueStack();
package com.action; import java.util.ArrayList;
import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.entity.Person;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack; public class IndexAction extends ActionSupport { private String name; public String getName() {
return name;
} private Person p; public Person getP() {
return p;
} private List<Person> lp = new ArrayList<>(); public List<Person> getLp() {
return lp;
} @Override
public String execute() throws Exception { // // 获取值栈对象
// ActionContext ac = ActionContext.getContext();
// // 值栈对象 存在于action对象中 (每一次访问action就会产生一个新的action对象)
// ValueStack vs = ac.getValueStack();
// vs.push("PUSH开头");
// vs.set("name", "哈哈");
// vs.push("PUSH结尾");
// 单个变量
name = "哈哈";
// 单个对象
p = new Person();
p.setName("haha");
p.setAge(18);
p.setSex("男");
// 单个集合
lp.add(new Person("asd", 1, "男"));
lp.add(new Person("asda", 12, "男")); // 域对象
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("name", "我是域对象的值"); return SUCCESS;
}
}
<!-- 获取值值栈对象(Map) -->
<s:property value="name"/>
<!-- 获取值 (String) -->
<s:property value="[2].top"/> --%>
<!-- 获取值 获取单个 变量 -->
<s:property value="name"/><br>
<!-- 获取值 获取单个对象 -->
<s:property value="p.name"/>
<s:property value="p.age"/>
<s:property value="p.sex"/><br>
<!-- 获取值 集合 第一种方式-->
<s:property value="lp[0].name"/>
<s:property value="lp[1].name"/><br>
<!-- 获取值 集合 第二种方式-->
<s:iterator value="lp">
<s:property value="name"/>
<s:property value="age"/>
<s:property value="sex"/><br>
</s:iterator>
<!-- 获取值 集合 第三种方式-->
<s:iterator value="lp" var="a">
<s:property value="#a.name"/>
<s:property value="#a.age"/>
<s:property value="#a.sex"/><br>
</s:iterator>
<!-- 获取值 集合 第四种方式-->
<c:forEach items="${lp}" var="p">
${p.name}
${p.age}
${p.sex}
</c:forEach>
<!-- 获取值 域对象 -->
<s:property value="#request.name"/>
<!-- s标签里放变量值 -->
<!-- value所绑定的值是值栈里面name的值 -->
<s:textfield value="%{name}"></s:textfield>
<!--在页面上输出一个字符串-->
<s:property value="'OGNL'"/>
<!--可以看见值栈里面所有的对象和值-->
<s:debug></s:debug>
Struts2 04--- 值栈 ognl(S标签)的更多相关文章
- Struts2的值栈和OGNL牛逼啊
Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...
- struts2(二)值栈 threadlocal ogal ui
值栈(重要)和ognl表达式 1. 只要是一个mvc框架,必须解决数据的存和取的问题 2. Struts2利用值栈来存数据,所以值栈是一个存储数据的内存结构 3. 把数据存在值栈中,在页面上利用 ...
- 初学者易上手的SSH-struts2 04值栈与ognl表达式
什么是值栈?struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值.,特点:先进后出.如果将它当做一个容器的话,而这个容器有两个元素,那么最上面的元素叫做栈顶元素,也就是所说的压 ...
- Struts2 的 值栈和ActionContext
1.ValueStack 和 ActionContext 的关系与区别: -- 相同点:它们都是在一次HTTP请求的范围内使用的,它们的生命周期都是一次请求 -- 不同点:ValueStack 分为对 ...
- Struts2的值栈和对象栈
ValueStack 如何得到值栈: 如何将对象存入值栈: 让值栈执行表达式来获得值: 在JSP中跳过栈顶元素直接访问第二层: 在JSP中访问值栈对象本身(而不是它们的属性) ActionContex ...
- Struts2 之值栈
值栈(ValueStack) http://www.cnblogs.com/bgzyy/p/8639893.html 这是我的有关 struts2 的第一篇文章,对于里面我们说到的一个 struts2 ...
- 【struts2】值栈(后篇)
在值栈(前篇)我们学习了值栈的基本知识,接下来,来看看在程序中具体如何使用值栈. 1 ActionContext的基本使用 1.1 如何获取? 要获取ActionContext有两个基本的方法,如果在 ...
- 【struts2】值栈(前篇)
1 值栈是什么? 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Result.Intercept ...
- struts2中值栈
值栈中的两个逻辑部分: 1.属性context,为OGNLContext类型,实际为ActionContext对象的一个引用,本质是一个Map,里面存放的各种Map,如request,session, ...
随机推荐
- 第四章初始CSS3预习笔记
第四章 初始CSS3预习笔记 一: 1: 什么是CSS? 全称是层叠样式表;/通常又称为风格样式表,.他是用来进行网页风格设计的; 2:CSS的优势: 1>内容以表现分离,即使用u前面学习的HT ...
- day9集合以及这段时间的总结 未完待续
随笔: # 可变类型:# 列表(可以存放多个值,可以按索引取值,是有序的),# 字典(字典里面是KEY:VALUE类型,key必须是不可变类型,不能按索引取值 因为它们是无序的,按KEY取值),# 集 ...
- phpstorm+wamp+xdebug配置php调试环境
本篇文章主要是:教大家如果搭建一套phpstorm+wamp+xdebug调试php的环境现在大多数的程序员使用的调试方式一般都是echo, var_dump, file_put_contents等其 ...
- TurnipBit开发板DIY呼吸的吃豆人教程实例
转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 0x00前言 吃豆人是耳熟能详的可爱形象,如今我们的TurnipBit也 ...
- http请求参数中包含特殊字符的严重后果,比如:#
URL请求中不能包含特殊符号,比如:# 今天在调接口,突然发现接口参数中传递的数据没有完全接收到controller层的model模型中,反反复复测了好几遍,真不信这个邪了,头晕脑胀的时候才关注到UR ...
- SpringMVC handleMapping 处理器映射器 属性清单
映射器的属性清单 defaultHandler 在映射与所有处理器都不匹配的情况下,指定默认的处理器(处理器即你定义的Controller(action)类) order ...
- PE文件解析器的编写(二)——PE文件头的解析
之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只 ...
- Core Animation 文档翻译 (第二篇)
Core Animation 文档翻译 (第二篇) 核心动画基础要素 核心动画为我们APP内Views动画和其他可视化元素动画提供了综合性的实现体系.核心动画不是我们APP内Views的替代品,相反, ...
- Redis随笔(四)Centos7 搭redis3.2.9集群-3主3从的6个节点服务
1.虚拟机环境 使用的Linux环境已经版本: Centos 7 64位系统 主机ip: 192.168.56.180 192.168.56.181 192.168.56.182 每台服务器是1主 ...
- String常用的方法
l String: 字符串类,字符串是常量:它们的值在创建之后不能更改 l 方法 boolean equals(Object obj) 判断两个字符串中的内容是否相同 boolean equalsIg ...