一:什么是值栈: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. Word发表blog格式模板

    一级标题(黑体,二号,加粗) 二级标题(黑体,三号,加粗) 正文(宋体+Times New Roman,小四) 注意事项: 序号列表"不连续"时,不得使用自动序号 连续(word连 ...

  2. Tomcat 服务器开启失败故障

    Server Tomcat v8.0 Server at localhost failed to start.故障 原因:1.可能是web.xml中的filter-mapping中url-patter ...

  3. OpenStack qemu-guest-agent 使用

    What is qemu-ga 我个人认为qemu-ga是在虚拟机中安装的一个agent,宿主机host通过通道(unix socket)与虚拟机vm内部的agent进行通信,这样宿主机就有了一种从外 ...

  4. python使用venv环境报Python.h : No such file or direc

    这个是因为域名 install python36的时候没有按照python36-devel ,只需要 yum install python36-devel 然后重新安装所需模块即可.

  5. JAVA并发编程学习笔记------结构化并发应用程序

    1. Executor基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程相当于消费者,如果要在程序中实现一个生产者-消费者的设计,最简单的方式通常就是使用Executor 2. Exe ...

  6. java求三角形面积以及周长---封装

    /*时间: 2012-10-08作者: 烟大程序要求: 1.封装一类三角形对象Triangle,该类对象具有三条边的属性, 具有初始化三角形的功能.修改边长的功能.判断三条边能否构成三角形的功能. 求 ...

  7. HTML+Javascript制作拼图小游戏详解(二)

    上一篇我们说了网页的基本布局.接下来将为大家带来具体的实现方法. 拼图通表格来实现,做一个方形的表格,改变其大小使之如图所示. 试想一下如果我们将一张图片剪成6张分别放入对应位置,然后再把它打乱,这样 ...

  8. linux文件的硬连接和软连接

    建立软连接:ln -s 原路径 目标路径 原理示意图: 特点: 1.     相当于win中的快捷方式 2.     删除链接文件,源文件不受影响 3.     删除源文件,链接文件失效 4.     ...

  9. (转)python字符串函数

    原文:https://www.cnblogs.com/emanlee/p/3616755.html https://blog.csdn.net/luoyhang003/article/details/ ...

  10. Flume搭建及学习(基础篇)

    转载请注明原文出处:http://www.cnblogs.com/lighten/p/6830439.html 1.简介 该文主要是翻译官方的相关文档,源地址点击这里.介绍一下Flume的一些基本知识 ...