Strus2标签库
第五章:struts2标签库

IBM Software Group
IBM Software Group
数据标签-----property标签
property标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出 的对象属性,如果没有指定value属性,那么默认输出栈顶对象。
IBM Software Group
IBM Software Group
IBM Software Group
Struts2标签库
在早期的WEB开发中,JSP视图控制和显示技术主要依靠Java脚本来实现,这样一来 ,JSP页面重新嵌入了大量的Java脚本代码,给开发带来了极大的不方便。 从JSP1.1规范后,JSP增加了自定义标签库的支持。标签库是一种组件技术,通过标 签库,可以将复杂的Java脚本代码封装在组件中,开发者只需要使用简单的代码就可 以实现复杂的Java脚本功能。提供了Java脚本的复用性,提高了开发者的开发效率。 Struts2标签库相对struts1.x进行了巨大的改进,支持OGNL表达式,不再依赖任何表现 层技术。
IBM Software Group
IBM Software Group示例:访问地址:http://localhost:8080/.../setTag.action
IBM Software Group
数据标签-----push标签
push标签用于把一个值压入值栈(位于栈顶),注意和set标签的区别,set标签是将值放 到action上下文中。当push标签结束后,push标签放入值栈中的对象将被删除,换句 话说,要访问push标签压入栈中的对象,需要在标签内部去访问。 push标签的属性
IBM Software Group
Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。
如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。
我的E-MAIL:Max.M.Yuan@。
在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。
分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。
1.非UI标志o if、elseif和else描述:执行基本的条件流转。
参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。
在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。
struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
Struts2中的s标签 API Java Struts 程序开发

B:
1. <s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值
C:
R:
1.
2. <s:radio list=""></s:radio>-----单选按钮
3. <s:reset></s:reset>-----重置按钮
S:
1. <s:select list=""></s:select>-----单选框
2. <s:set name=""></s:set>-----赋予变量一个特定范围内的值
4. <s:iterator></s:iterator>-----用于遍历集合
L:
1. <s:label></s:label>-----只读的标签
M:
1. <s:merge></s:merge>-----合并遍历集合出来的值
O:
数据标签:
action:直接调用一个Action,根据executeResult参数,可以将Action的处理结果包含到页面中。
bean:创建一个JavaBean实例。。
date:格式化输出一个日期属性。
debug:生成一个调试链接,当单击该链接时,可以看到当前栈值中的内容。
《Java 框架技术》理论课程教学大纲

《JAVA 框架技术》课程教学大纲一、课程基本信息二、课程教学目标学生学习完本课程之后,能够掌握J2EE企业级应用程序开发的流行框架技术SSH,掌握SSH相关技术、框架设计思想和开发模式等。
1.理解Strust2运行机制,掌握其相关技术的配置使用方法;2.理解Hibernate框架,掌握其相关技术的配置使用方法;3.理解Spring体系结构,掌握其相关技术的配置使用方法;4.掌握Sruts2+Hibernate+Spring整合开发框架,在企业级应用程序开发中的使用技能;三、教学学时分配《JAVA 框架技术》课程理论教学学时分配表《Java 框架技术》课程实验内容设置与教学要求一览表四、教学内容和教学要求第一章 Struts2入门(2学时)(一)教学要求通过本章内容的学习,了解Struts2和Struts1的不同,掌握Struts2的运行配置方法。
(二)教学重点与难点教学重点:配置Struts2教学难点:配置Struts2(三)教学内容第一节 Struts2概述1.Struts1概述2.Struts2概述与优势第二节配置Struts21.配置Web.xml2.配置Struts.properties3.配置Struts.xml第二章拦截器(2学时)(一)教学要求通过本章内容的学习,了解拦截器的工作原理和意义,掌握拦截器的配置方法,掌握自定义拦截器的使用等。
(二)教学重点与难点教学重点:拦截器配置、自定义拦截器教学难点:拦截器方法过滤(三)教学内容第一节拦截器简介1.拦截器工作原理2.拦截器的意义3.拦截器角色第二节拦截器配置1.配置拦截器2.使用拦截器3.默认拦截器第三节自定义拦截器1.实现拦截器类2.使用自定义拦截器3.默认拦截器第四节深入拦截器1.拦截器方法过滤2.拦截器的拦截顺序3.拦截结果监听器第三章 Action和类型转换(2学时)(一)教学要求通过本章内容的学习,理解解Action控制器的作用,掌握Action控制器的定义、配置。
31________struts2_3_ognl_非UI_UI_过滤投影

OGNL:【struts的标签库在 struts2-core-2.3.11.jar 下的META-INF下】【引入标签库:<%@ taglib uri="/struts-tags" prefix="s"%>】OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。
Struts2框架使用OGNL作为默认的表达式语言。
OGNL相对其它表达式语言具有下面几大优势:1、支持对象方法调用,如xxx.doSomeSpecial();2、支持类静态的方法调用和值访问,表达式的格式:@[类全名(包括包路径)]@[方法名 | ?值名],例如:@ng.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;3、支持赋值操作和表达式串联,如price=100, discount=0.8,calculatePrice(),这个表达式会返回80;4、访问OGNL上下文(OGNL context)和ActionContext;5、操作集合对象。
Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map的接口.OGNL(Object Graph Navigation Language),是一种表达式语言。
使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。
如果我们把表达式看做是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。
================================================================================ ====================================================【一、理解Struts2中的 ValueStack:】ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础ValueStack(值栈): 贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前Action 对象和其他相关对象.Struts 框架把 ValueStack 对象保存在名为“struts.valueStack”的请求属性中,request 中在 ValueStack 对象的内部有两个逻辑部分:ObjectStack: Struts 把动作和相关对象压入 ObjectStack 中--List 对象栈ContextMap: Struts 把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中Map栈Struts 会把下面这些映射压入 ContextMap 中 (Map栈中)root: ObjectStack对象栈的引用parameters: 该 Map 中包含当前请求的请求参数request: 该 Map 中包含当前 request 对象中的所有属性session: 该 Map 中包含当前 session 对象中的所有属性application:该 Map 中包含当前 application 对象中的所有属性attr: 该 Map 按如下顺序来检索某个属性: request, session, application在ObjectStack(对象栈)中一般放入:ValueStackAction对象map集合实体类对象================================================================================ =======================================【二、理解OGNL Context】OgnlValueStack 类包含两个重要的属性一个root和一个context。
structs2

IoC方式
要使用IoC方式,我们首先要告诉IoC容器 (Container)想取得某个对象的意愿,通 过实现相应的接口做到这点
11
Acபைடு நூலகம்ionContext
一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() 在structs2中,它通过包装提供了对Servlet的访问:
22
“%”符号
“%”符号的用途是在标志的属性为字符串 类型时,计算OGNL表达式的值。例如在 Ognl.jsp中加入以下代码 "%{#foobar['foo1']}"
23
“$”有两个主要的用途
用于在国际化资源文件中,引用OGNL表达 式 在Struts 2配置文件中,引用OGNL表达式
国际化支持
1 resource bundle per action
pervasive UI support for retrieving messages
8
Action
如果我要取得Servlet API中的一些对象, 如request、response或session等,应该 怎么做?这里的execute不像Struts 1.x的 那样在参数中引入。开发Web应用程序当然 免不了跟这些对象打交道。在Strutx 2.0你 可以有两种方式获得这些对象:非IoC(控 制反转Inversion of Control)方式和IoC 方式
12
二、structs2原理
XWork2的层次:
ActionProxy ActionInvocation Action
Struts2标签使用

Struts2标签使用(1):<s:textfield> ---- 文本输入框使用:<s:textfield name=”实体Bean。
属性”></s:textfield>(2):<s:textarea> ----- 文本域输入框使用:<s:textarea name=”实体Bean。
属性”></s:textarea>(3):<s:password> ----- 密码输入框使用:<s:password name=”实体Bean。
属性”></s:password>前三个基本都是一样的。
如果是要显示值的话可以这样:value = “实体Bean。
Get***()”。
(4):<s:radio list=””> ---- 单选按钮使用:<s:radio list=””>其中list 属性是必须要有的。
<1>:第一种方式:list = “#{‘male’:’男’,’female’:’女’}”<2>:第二中方式:list = “#request/session.list”。
---- 与action 结合起来了。
如果要默认选中的话后面加上value = “”.也可以通过javascript 的方式来默认选中。
(5):<s:url/> --- url连接<s:a/> --- 超链接这两个标签一般结合起来来使用。
使用:<s:url id = “id” action = “userAction”/><s:a href=”%{id}”/>(6):<s:form/> --- 获取相应form的值使用:<1>:<s:form action = “userAction”><2>:<s:url id=”userId” action = “userAction”> -- 定义了一个userId的指向userActionde 路径<s:form action=”%{userId}”>(7):<s:submit/> ---- 提交标签(8):<s:reset/> ---- 重置标签(9):<s:hidden/> ---- 隐藏域标签使用:<s:hidden name=”实体Bean。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Strus2标签库Struts2提供了一套标签库用于简化JSP层的编程,开发者只需要标签中做少量的设置,就可以实现各种常用的效果。
Struts2的标签与Action联系比较紧密,使用标签后,Struts会自动完成JSP层的显示数据、在Action层采集数据等工作。
Struts2的标签都统一包含在struts-tags.tld文件中(位于struts2-core-2.2.1.jar中),使用统一前缀。
Struts标签库大致分为:UI标签:包括表单标签,非表单标签非UI标签:流程控制标签,数据访问标签首先要在JSP中使用taglib编译指令导入标签库,然后才可以使用标签。
<%@taglib prefix="s" uri="/struts-tags"%>以上代码用于导入Struts2标签库,其中URI就是对应web.xml文件中指定的标签库的URI,而prefix属性值是该标签库的前缀。
第1节OGNL语言OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
它使用相同的表达式去存取对象的属性。
OGNL语法类似于EL,主要使用.作为操作符,例如要访问person.getCountry().getName()可以这样写:。
1.1 OGNL的常用符号主要是#号,其作用有三种:1. 访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext(),常用#属性如下表:<!-- 返回Http请求中的参数 --><p>parameters: <s:property value="#erName" /></p>相当于:request.getParameter("userName");<!-- 返回request中的属性 --><s:property value="#erName" />相当于:request.getAttribute("userName");<!-- 返回Session中的属性 --><s:property value="#erName" />相当于:session.getAttribute("userName");<!-- 返回Application中的属性 --><s:property value="#erName" />相当于:application.getAttribute("userName");<s:property value="#erName" />2.用于过滤或筛选集合例如:books.{?#this.price<20},表示所有的price<20的书。
“?”:取出所有符合选择逻辑的元素。
以上代码中,直接在集合后紧跟.{}运算符表明用于取该集合的子集,在{}内使用?表明取出所有符合选择逻辑的元素,而#this代表集合里的元素。
<s:iterator value="books.{?#this.price < 20}"><li><s:property value="title" />- $<s:property value="price" /></li> </s:iterator>以上代码的含义是:当books对象中的某个元素中的属性price大于35时,就输出。
其中title和price分别是books对象中的变量(实例域)。
Book是一个POJO,其中包括如下变量和其get/set方法。
private String isbn;private String title;private double price;books是一个泛型列表集合,其本例中的泛型类型是Book,其创建如下:private List<Book> books= new LinkedList<Book>();其数据的装入如下:books.add(new Book("978-0735619678", "Code Complete, Second Edition", 32.99));3.构造Map<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />以上代码构造一个Map对象。
对象名为foobar,其中的值为键值对,foo1="bar1",foo2=bar2;当要构造一个List对象的时候,则不需要“#”。
<s:property value="#foobar['foo1']" />以上代码可以访问一个Map对象中的键。
综合实例:StrutsTagDemo01在地址栏输入:http://localhost:8080/StrutsTagDemo01/ognl.action?id=1&id=2&id=31.2 控制标签以下标签示例均在StrutsTagDemo02项目中。
1. iterator标签遍历集合iterator标签用于遍历集合(包括List、Set、Map)、数组等。
可以使用OGNL表达式对数据进行过滤。
可以指定如下3个属性:value:这是一个可选的属性,value属性指定的就是被迭代的集合,被迭代的集合通常都使用OGNL表达式指定。
id:这是一个可选的属性,该属性里指定了集合里元素的ID。
status:这是一个可选的属性,该属性指定迭代时的IteratorStatus实例,通过该实例即可判断当前迭代元素的属性。
例如是否是最后一个,以及当前迭代元素的索引等。
如果为该标签指定了status属性,即每次迭代时都会有一个IteratorStatus实例,该实例包括如下几个方法:int getCount() 返回当前迭代了几个元素int getIndex() 返回当前迭代元素的索引boolean isEven() 返回当前被迭代的元素的索引是否是偶数boolean isOdd() ................................奇数boolean isFirst() 返回当前被迭代的元素是否是第一个元素boolean isLast() ..........................最后一个元素<struts:iterator value="magazineList.{?#this.price>18}"><struts:property value="name" /> - ¥<struts:property value="price" />. <br/> </struts:iterator>2. if、elseif、else标签控制流程Struts2的判断标签有3个:<struts:if> <struts:elseif> <struts:else>其右if标签与else标签都有test属性示例:IfAction.java ifTag.jsp3. append标签连接多个Listappend标签用于将多个集合对象拼接起来,组成一个新的集合。
从而允许通过一个<s:iterator.../>标签完成多个集合的迭代。
示例:AppendAction.java appendTag.jsp地址栏输入:http://localhost:8080/StrutsTagDemo02/Append.action4. merge标签取集合的并集merge标签类似于append标签,能将两个List连接成一个List。
它们的用法完全一致。
不同的是,append标签是先添加集合1所有元素,再添加集合2所有元素;而merge是先添加集合1第1个元素,再添加集合2第1个元素,再添加集合1第2个元素,再添加集合2第2个元素。
示例:AppendAction.java、mergeTag.jsphttp://localhost:8080/StrutsTagDemo02/Append.action5.subset标签subset标签用于筛选集合里的元素,取得集合的子集。
它使用一个Filter,将不合格的元素过滤掉,剩下原集合的一个子集。
subset需要使用decider属性,decider是个过滤器,必须实现SubsetIteratorFilter.Decider接口以及decide方法。
示例:SubsetAction.java、subsetTag.jsp在地址栏输入:http://localhost:8080/StrutsTagDemo02/Subset6.generator标签generator标签用于将字符串转化为List,相当于Java的split常用属性:count:该属性是一个可选的属性,该属性指定生成集合中元素的总数。
separator:这是一个必填的属性,该属性指定用于解析字符串的分隔符。
val:这是一个必填的属性,该属性指定被解析的字符串。
converter:可选属性,指定了一个转换器,负责将集合中的每个字符串转换成对象。
示例:generatorTag.jsp1.3 数据标签以下标签示例均在StrutsTagDemo02项目中。
1. action标签该标签用于在JSP页面中直接调用Action,并将结果包含进来,相当于JSP中的include,因为需要调用Action,故可以指定需要被调用Action的name及namespace。
如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含到本页面中来。