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, ...
随机推荐
- 【转】搭建spark环境 单机版
本文将介绍Apache Spark 1.6.0在单机的部署,与在集群中部署的步骤基本一致,只是少了一些master和slave文件的配置.直接安装scala与Spark就可以在单机使用,但如果用到hd ...
- windows 安装Mysql压缩包
1.将mysql压缩包解压至选定目录下 2.修改my-default.ini文件的以下内容 basedir = E:\develope_software\MySQL\mysql-advanced-5. ...
- C# DataGridView 的UserDeletingRow事件,删除
DialogResult dr = MessageBox.Show("确认删除记录吗?", "提示", MessageBoxButtons.YesNo); ...
- 嵌入式linux下wifi网卡的使用(四)——应用程序sub_supplicant编译
有readme先看看readme看看有没有编译的方法 里面告诉我们安装时可能会依赖某些库事实证明会依赖openssl库,之前也使用过openssl 这个文件中有个defualtconfig,先用它做. ...
- delphi用webservice
delphi的webservice开发. 一.在已有的项目中,调用外部的webservice 1.根据向导建webservice,在项目中引入“WSDL Importer".假设引入后生成的 ...
- Python的Django框架完成一个完整的论坛(源码以及思路)
一个完整的论坛,登录.注册.发表.头像.点赞.评论.分页.阅读排行等 使用Django2,Python3.5 开发工具:Pycharm5 需要的知识:Python基础知识,Django原理的理解以及使 ...
- PyQt4 开发入门
参考资料:PyQt4教程
- Android技术之-------电脑获取手机截图
入吾QQ群183435019(学习 交流+唠嗑) 其实这个相当简单 应该会点ADB命令的人都会吧 一 下载一个ADB 如果你是学Android编程的,,Android SDK应该有吧,在Android ...
- CSS3 动画 cheatsheet
Transition 实例 .box { height: 100px; width: 100px; background: #212121; transition: width 1s ease, he ...
- FileSaver.js 介绍
这是著名开源项目 FileSaver.js 的 README.md,我把它翻译成中文.发出来,方便自己和他人阅读. 项目地址:https://github.com/eligrey/FileSaver. ...