1.在show.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body style="font-size: 30px;"> 查看ValueStack信息: <br> <s:debug></s:debug> <h1> 访问root中的 </h1> <br> id属性: <s:property value="id" /> <br> time属性: <s:property value="time" /> <br> 使用date标签设定显示时间的格式 <br> 指定时间格式: <s:date name="time" format="yyyy-MM-dd hh:mm:ss" /> <h1> 访问Context中对象 </h1> 访问Session: <s:property value="#session.hello" /> <h1> 使用OGNL调用方法 </h1> Message的长度: <s:property value="message.length()" /> <br> OGNL调用静态的属性: <s:property value="@java.lang.Math@PI" /> <br> <!--@:代表@java.lang.Math--> <s:property value="@@PI" /> <br> <!-- 自定义静态属性建议不要在Action中进行设置 --> 获取自定义静态属性: <s:property value="@zx.day2.action.ShowAction@show" /> <s:property value="#show" /> <br> 使用OGNL进行运算: <s:property value="id+100>250" /> <br> 范文List中的数据 <br> list第一个对象的工资: <s:property value="emps[0].name" /> 的工资为 <s:property value="emps[0].salary" /> <br> list的长度: <s:property value="emps.size" /> <br> 判断集合是否为空: <s:property value="emps.isEmpty" /> <hr> <h1> set标签 </h1> <!-- request.setAttribuet(key,value); --> scope:request: <s:set var="uname" value="emps[0].name" scope="request"></s:set> <s:property value="#request.uname" /> <br> scope:action <s:set var="usalary" value="emps[0]" scope="action"></s:set> <s:property value="#usalary.salary" /> <h2> push标签 </h2> <s:push value="emps[0]"> 姓名:<s:property value="name" /> <br> 工资:<s:property value="salary" /> </s:push><br> <h2> bean标签 </h2> <s:bean name="zx.day2.pojo.Emp" var="e1"> <s:param name="name">zhangsan</s:param> <s:param name="salary">1222.0</s:param> <!-- value的值使用单引号表示字符串 <s:param name="name" value="'zhangsan'"/> <s:param name="salary" value="133"></s:param> --> </s:bean> 从页面创建的对象中获取数据<br> name:<s:property value="#e1.name"/><br> salary:<s:property value="#e1.salary"/> </body> </html>
2.在zx.day2.pojo包中创建Emp实体类 package zx.day2.pojo; public class Emp { private int id; private String name; private double salary; public Emp(int id, String name, double salary) { this.id = id; this.name = name; this.salary = salary; } public Emp() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
3.actionTest.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body style="font-size: 30px;"> <s:action name="list" namespace="/" executeResult="true" ignoreContextParams="false"> </s:action> </body> </html>
4.在 iterator.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body style="font-size: 30px;"> <h1> Iterator 迭代标签 </h1> <s:iterator var="e" value="emps" status="s"> <s:property value="#s.index" /> <s:property value="#s.count" /> <s:property value="#e.name" /> <s:property value="#e.salary" /> <br> </s:iterator> <h2> if/else/elseif </h2> <s:if test="emps.size>5"> 员工个数超过5个 </s:if> <s:else> 就几个,牛什么牛! </s:else> <br> 员工数组中有没有一个叫tom的 <br> 对集合进行过滤: <br> <s:if test="emps.{?#this.salary>10000}"> a123有 </s:if> <s:else> 没有Tom </s:else> <br> 工资大于800的员工 <br> <s:iterator var="e" value="emps.{?#this.salary>800}"> <s:property value="#e.salary" /> <br> </s:iterator> 工资大于800的第一个员工 <br> <s:iterator var="e" value="emps.{^#this.salary>800}"> <s:property value="#e.salary" /> <br> </s:iterator> <br> 工资大于800的第一个员工 <br> <s:iterator var="e" value="emps.{$#this.salary>800}"> <s:property value="#e.salary" /> <br> </s:iterator> <br> <!-- Include:<br> <s:include value="opt.jsp"></s:include> <br> URL:<a href="<s:url value="/login.action"/>">登陆</a> --> </body> </html>
5.在ShowAction中
package zx.day2.action; import java.util.ArrayList; import java.util.Date; import java.util.List; import zx.day2.pojo.Emp; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class ShowAction extends ActionSupport { /** * */ private int id; private Date time; private String message; private static String show = "haoren"; private List<Emp> emps; public String execute() { id = 100; time = new Date(); message = "1234567"; // 创建了一个Session ActionContext.getContext().getSession().put("hello", "hello OGNL"); emps = new ArrayList<Emp>(); emps.add(new Emp(1, "haoren", 2500)); emps.add(new Emp(2, "lily", 1500)); emps.add(new Emp(3, "jerry", 800)); emps.add(new Emp(4, "tom", 650)); return "success"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public static String getShow() { return show; } public static void setShow(String show) { ShowAction.show = show; } public List<Emp> getEmps() { return emps; } public void setEmps(List<Emp> emps) { this.emps = emps; } }
6.在struts.xml文件中
<action name="show" class="zx.day2.action.ShowAction"> <result name="success">/show.jsp</result> </action> <action name="list" class="zx.day2.action.ShowAction"> <result name="success">/iterator.jsp</result> </action>
发表评论
-
struts2day06 自定义结果
2012-07-16 12:14 673类implements Result接口 或者 extends ... -
struts2day06 Struts2.0的result
2012-07-16 12:01 950Struts2.0的result Action ... -
struts2day06学习笔记
2012-07-16 10:55 8521.new String(xxx.getBytes(),&qu ... -
struts2day05异常处理
2012-07-13 23:13 834Struts2.0的异常处理机制 1.什么是异常?软件在 ... -
Struts2day05学习笔记
2012-07-13 22:19 6751.自定义拦截器 1.im ... -
Struts2day04Struts2.0文件的下载
2012-07-13 08:26 6761.写一个Action,在DownloadAction ext ... -
Struts2day04Struts2.0文件的上传
2012-07-13 08:20 6501、在服务器端提供一个文件夹存放提交的文件,upload文件夹 ... -
Struts2day04Struts2.0实现阻止表单重复提交
2012-07-12 21:01 6231.使用叫做token的拦截器,在表单中加入<s:tok ... -
Struts2day04对Action的方法进行过滤拦截
2012-07-12 20:38 17811.写一个Action类 UserManagerAction ... -
Struts2day04判断用户是否登录
2012-07-12 19:37 8691.在拦截器中获得用户登录的session 在LoginC ... -
Struts2day04测试程序的执行效率,拦截器栈,在Action中覆盖拦截器的属性值
2012-07-12 18:58 11861.在LoginAction.java中,extends Ac ... -
Struts2学习笔记day04
2012-07-12 00:31 6201.自定义类型转换 1.写一个类 extends S ... -
Struts2day03Struts2.0提供的数据格式校验
2012-07-11 21:52 716Struts2.0提供的数据格式校验 js校验:存在被 ... -
Struts2day03Struts2.0国际化
2012-07-11 21:09 764Struts2.0国际化 B/S结构中为网页提供多国 ... -
Struts2day03OGNL自定义类型转换
2012-07-11 20:47 806Struts2.0框架不能够或者不能完整的进行自动类型转换 ... -
Struts2学习笔记day03
2012-07-11 19:09 9471.值栈:ValueStack,存储数 ... -
Struts2day02多个对象提交
2012-07-10 07:15 1187在listUser.jsp页面 <%@ page la ... -
Struts2day02表单标签
2012-07-10 07:15 6651.在struts2Form.jsp中 <%@ ... -
Struts2day02动态方法调用
2012-07-10 07:14 6521.在opt.jsp页面 <%@ page langu ... -
Struts2day02使用通配符调用指定的方法
2012-07-10 07:14 7291.在opt.jsp页面 <%@ page langu ...
相关推荐
深入讲解Struts中的ognl和valueStack
通过EL,我们可以存、取对象数据,而且还可以直接访问类的静态数据,调用静态方法。 3、 WebWork的ValueStack底层有第三方开源项目OGNL实现。所以EL也都遵循OGNL的规范。我们在开发中,几乎不需要知道OGNL的细节。...
Struts2作为一款流行的Java Web框架,为开发者提供了丰富的功能,包括方便地访问HTTP请求、会话以及应用程序范围内的数据。在Struts2中,有四种主要的方式可以用来操作request、session和application上下文中的数据...
在Struts2中,OGNL被广泛应用于处理对象之间的导航和访问,特别是在展示数据到视图层的过程中扮演着关键角色。OGNL的使用需要了解以下几个概念: - **OgnlContext**:这是一个核心组件,在OGNL中用于管理根对象(root...
根据给定的信息,我们将深入探讨Struts2框架中的一些核心概念,包括OGNL表达式的使用、ValueStack的理解及其数据存取方法,以及拦截器的生命周期等。 ### OGNL表达式及其三要素 #### OGNL简介 OGNL(Object-Graph ...
Struts2中的ValueStack是模型部分的重要组成部分,它可以方便地处理Action对象与页面之间的数据传递。我们可以在Action中直接通过栈顶对象(通常是Action实例)的属性来获取和设置请求参数。例如: ```java ...
OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许开发者访问和操作 ValueStack 中...
本文将详细讲解在Struts2中获取`request`对象的几种常见方法,以及它们的适用场景。 1. **Action上下文(ActionContext)** `ActionContext`是Struts2的核心组件之一,它封装了与当前请求相关的所有上下文信息,...
Struts2是一个流行的Java web框架,...以上就是"马士兵Struts2笔记2013"中涉及的主要知识点,这些内容涵盖了Struts2的基础配置、数据处理、验证、调试以及与视图层的交互等方面,对于理解和掌握Struts2框架非常有帮助。
- **ValueStack演示**:通过具体的示例介绍如何在Struts2中使用ValueStack来管理数据,如如何添加对象到ValueStack中、如何从ValueStack中取出对象等。 ### 分页功能实现 - **分页02** 案例描述了如何在Struts2...
在Struts中,OGNL用于在Action对象和视图之间传递数据。它的主要功能包括: 1. **属性访问**:OGNL可以轻松地获取或设置对象的属性,无论是简单类型还是复杂类型。 2. **动态方法调用**:通过OGNL,你可以动态地...
- **Struts2**: 引入了ValueStack的概念,这使得开发者可以在视图层直接访问Action中的数据。Struts2还支持多种视图技术,如FreeMarker、Velocity等。 #### 数据绑定 - **Struts1**: 使用Commons-BeanUtils进行...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种表达式语言,用于访问和操作对象的属性。OGNL上下文(OGNL Context)和Action上下文是Struts2中两个重要的概念,它们对于理解和使用OGNL表达式至关重要...
- **访问四大作用域中的数据:** Struts2提供了内置的标签库,结合OGNL可以让开发者方便地访问应用中的各种数据。 - **ValueStack与ActionContext:** - **ValueStack存在于Action上下文中:** 每次处理请求时,...
OGNL是Struts2中用于对象属性访问和表达式语言,它允许在Action、ValueStack和视图层之间传递数据。ValueStack是一个对象栈,它持有ActionContext上下文中的所有对象,包括Action实例、ActionForm、Session、Request...
总的来说,ActionContext是Struts2框架处理请求上下文的核心,而OGNL则提供了灵活的数据访问和操作能力,两者结合使得Struts2能够高效地处理请求,实现模型和视图的解耦,提高Web应用的可维护性和可扩展性。
在Struts2中,OGNL用于传递Action与视图之间的数据,以及在拦截器中进行表达式计算。 4. **struts2-convention-plugin.jar**:这是Struts2的约定优于配置插件,它简化了Action类和结果配置,使得开发者可以按照一定...
总的来说,OGNL是Struts2框架中不可或缺的一部分,它提供了一种强大而灵活的方式来访问和操作对象属性,结合Struts2的标签,使得视图层和模型层之间的数据交互变得简单且高效。通过理解OGNL的工作原理和在Struts2中...