struts2标签详解.docx
- 文档编号:9248700
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:19
- 大小:34.80KB
struts2标签详解.docx
《struts2标签详解.docx》由会员分享,可在线阅读,更多相关《struts2标签详解.docx(19页珍藏版)》请在冰豆网上搜索。
struts2标签详解
说明:
本文大部分内容翻译自struts-2.0.8-all\struts-2.0.8\docs\docs\using-tags.html,并将struts2的标签作为附录补充,标签尚有部分未补充完。
在上篇(HelloWorld篇)中,我们呈现了一个简单的欢迎界面。
在本篇中,我们将创建链接到应用其他Action的链接。
Web应用程序与传统的Web站点有所不同,在Web应用程序中我们可以创建动态的返回。
为了更容易的在页面上获得动态数据,本框架提供了一些标签集。
其中有些标签模拟了标准的HTML标签,但是提供了一些额外功能。
还有一些框架提供了非标准的、但非常有用的控制功能。
Struts标签的一个使用是创建一个到另外的Web资源的访问链接,特别是到本地的其他资源的链接。
说明:
虽然HTML为创建超链接提供了简单的标签,HTML标签常常需要我们包括一些冗余的信息。
并且HTML标签不能很容易的得到本框架的动态数据。
一.链接标签
在Web应用程序中的一个常用的功能是链接到其他页面,现在让我们为前面章节的欢迎界面添加到其他Action的链接。
代码
显示注册与登录的jsp的代码如下:
<%@taglibprefix="s"uri="/struts-tags"%>
urlvalue="/css/tutorial.css"/>"rel="stylesheet" type="text/css"/>
Commands
urlaction="Register"/>">Register
urlaction="Logon"/>">SignOn
运行效果如下:
另一个常用的功能是使用链接来改变语言,在前章的HelloWorld页面中,让我们改变用户的语言,并根据对应的应用程序资源来呈现信息。
代码如下:
propertyvalue="message"/>
propertyvalue="message"/>
Languages
urlid="url"action="HelloWorld">
paramname="request_locale">en
param>
url>
ahref="%{url}">English
a>
urlid="url"action="HelloWorld">
paramname="request_locale">es
param>
url>
ahref="%{url}">Espanol
a>
运行效果如下:
代码是如何工作的?
上述例子中的“%{url}”将会被s:
url标签来求得对应的值。
在Welcome和HelloWorld页中,我们使用了两种不同的链接标签。
我们可以创建如下标签:
资源链接 直接的链接 带参数的链接
下面让我们分别看一下它们的使用:
1. 资源链接
首先在jsp的HEAD元素中,我们使用url标签来将资源引入到页面中,代码如下:
urlvalue="/css/tutorial.css"/>" rel="stylesheet"type="text/css"/> 注意: 引用时绝对的。 我们可以移动该页面到其他路经而不用担心相对路径。 2.直接链接 我们可以使用链接标签来定向到Action,实例代码如下: urlaction="Register"/>">Register
当链接运作的时候,链接标签能够自动追加正确的扩展,因此我们不需要在应用程序中嵌入。
这个标签也将会用会话id来编码链接的URL,因此Java的会话在请求之间能够保持。
3.带有参数的链接
在上述的有关改变语言的HelloWorld页中,我们可以使用带有参数信息的url标签来创建带有参数的链接,该段代码如下:
urlid="url"action="Welcome"> paramname="request_locale">en param>
url>
ahref="%{url}">English
a>
param标签将会在Welcome的Action的url后增加信息:
“?
request_locale=en”。
这个标签接着将“url”引用注入到超链接中。
说明:
通过增加param标签能够增加任意数量的标签。
二. 通配符映射
在上述例子的Welcome页面中,除了链接之外尚未添加任何内容,我们不需要添加Action类。
但是,我们仍然需要添加一个映射,以便我们可以使用actionURI(如果我们映射到action,而不是页面,我们在后面也可以很容易的添加Action类),映射代码如下:
当我们创建应用程序的时候,我们常常需要直接链接到页页面,为了使原型更加容易,我们可以将Welcome的进入改为通配符,修改后的映射如下:
这是代码是如何工作的呢?
如果找不到映射,本框架将会做如下工作:
将“Welcome”映射为星号
l将“Welcome”代替result中对应的“{1}”
同样的,如果在映射文件中找不到“Login”的映射,将会映射到“/tutorial/Login.jsp”页面。
说明:
通配符映射能够使得你能够创建你自己的规约,以便你能够避免冗余的配置。
三.数据输入表单
大多数应用程序都使用一些数据进入表单。
Struts标签使得输入表单更加容易,代码如下:
<%@taglibprefix="s"uri="/struts-tags"%>
formaction="Logon"> textfieldlabel="UserName"name="username"/> passwordlabel="Password"name="password"/> submit/> form> 执行效果如下: 代码是如何工作的呢? JSP标签在页面顶部引入了Struts的标签库 Struts标签: textfield、password和submit,每一个都写出了正确的Lable和控制类型 四.需要记住的东西 编写web应用程序的最难的一部分是编写页面。 本框架通过提供一系列的Struts标签使得编写页面更加容易。 Struts标签能够获得框架提供的动态数据。 标签减少了用来创建页面所需做的工作。 附录一 ——标签使用指南 一. 通用标签 通用标签被用来在页面执行的时候,来控制执行流。 这些标签同样允许数据不是从Action或者值栈中提取,例如本地化、JavaBeans、包括额外的URL或action执行。 控制类标签提供了控制流,例如if,else和iterator 数据类标签允许数据操作或创建,例如bean、push和i18n 控制类标签有if、elseIf、else、append、generator、iterator、merge、sort、subset。 数据类标签有a、action、bean、date、debug、i18n、include、param、push、set、text、url、property。 分别介绍如下: 1. 控制类标签 1)if、elseif和else 描述: 执行基本的控制流,if能单独使用,也可与else、elseif标签搭配使用。 参数: 名称 必选 默认值 求值 类型 描述 id 否 是 String id用来引用元素。 对于UI或者form标签,它的意义等同于HTML的id属性 test 是 是 Boolean 用来决定标签体是否显示的表达式 使用举例: iftest="%{false}"> if> elseiftest="%{true}"> elseif> else>
else>
2)append
该标签的工作是追加迭代器,
例如,如果有三个迭代器(每个迭代器有三个元素)需要追加,下面展示了这个追加迭代器是如何排列的。
首先是进入第一个迭代器的第一个元素;
第二步是进入第一个迭代器的第二个元素;
第三步是进入第一个迭代器的第三个元素;
第四步是进入第二个迭代器的第一个元素;
第五步是进入第二个迭代器的第二个元素;
第六步是进入第二个迭代器的第三个元素;
第七步是进入第三个迭代器的第一个元素;
第八步是进入第三个迭代器的第二个元素;
第九步是进入第三个迭代器的第三个元素。
参数:
名称
必选
默认值
求值
类型
描述
id
否
是
String
如果提供了该id的值,将会具有追加迭代器存储到堆栈上下文中的合成结果
使用举例:
Action类的代码:
public class AppendIteratorTagAction extends ActionSupport {
private List myList1;
private List myList2;
private List myList3;
public String execute() throws Exception {
myList1 = new ArrayList();
myList1.add("1");
myList1.add("2");
myList1.add("3");
myList2 = new ArrayList();
myList2.add("a");
myList2.add("b");
myList2.add("c");
myList3 = new ArrayList();
myList3.add("A");
myList3.add("B");
myList3.add("C");
return "done";
}
public List getMyList1() { return myList1; }
public List getMyList2() { return myList2; }
public List getMyList3() { return myList3; }
jsp页面的代码:
appendid="myAppendIterator"> paramvalue="%{myList1}"/> paramvalue="%{myList2}"/> paramvalue="%{myList3}"/> append> iteratorvalue="%{#myAppendIterator}"> property/> iterator> 3)generator 描述: 创建一个基于提供的值的迭代器。 注意: 产生的迭代器将常常被推入堆栈顶部,而在标签结束的时候被推出。 参数: 名称 必选 默认值 求值 类型 描述 converter 否 是 org.apache.struts2.util.IteratorGenerator.Converter 将从值中分析的字符串转换为一个对象的转换器 count 否 是 Integer 在迭代器中的最大值 id 否 是 String 如果提供了id,它将会用来存储产生的迭代器到页面上下文 separator 是 是 String 分隔符用来将迭代器中的值分开 val 是 是 String 用来解析成迭代器的源 举例: 例1: 例一: 产生一个简单的迭代器 generatorval="%{'aaa,bbb,ccc,ddd,eee'}"> iterator> property/> iterator> generator> 这里产生了一个迭代器,并且使用iterator标签将它打印出来 例二: 产生一个带有count属性的迭代器 generatorval="%{'aaa,bbb,ccc,ddd,eee'}"count="3"> iterator> property/> iterator> generator> 这里产生了一个迭代器,但是只有其中的三个元素是可用的,这三个分别是aaa、bbb和ccc 例三: 产生一个带有id属性的迭代器 generatorval="%{'aaa,bbb,ccc,ddd,eee'}"count="4"separator=","id="myAtt"/> <% Iteratori=(Iterator)pageContext.getAttribute("myAtt"); while(i.hasNext()){ Strings=(String)i.next();%> <%=s%> <% }%> 产生了一个迭代器,并且将它存入页面上下文的指定的id(myAtt)属性中。 例四: 带有converter属性的generator标签 generatorval="%{'aaa,bbb,ccc,ddd,eee'}"converter="%{myConverter}"> iterator> property/> iterator> generator> publicclassGeneratorTagActionextendsActionSupport{ .... publicConvertergetMyConverter(){ returnnewConverter(){ publicObjectconvert(Stringvalue)throwsException{ return"converter-"+value; } }; } ... } 产生的这个迭代器,它的每个元素由提供的转换器获得。 在这个转换器中,只是为每个元素增加了“converter-”。 thisconverter,itsimplyadd"converter-"toeachentries. 4)iterator 描述: 迭代器将会迭代值。 一个可迭代的值可以是java.util.Collection,也可以是java.util.Iterator。 参数: 名称 必选 默认值 求值 类型 描述 id 否 是 String id用来引用元素。 对于UI和表单标签,它与HTML的id标签相当 status 否 否 是 Boolean 如果该值被指定,一个迭代状态的实例将会在每一个迭代中被推入堆栈中 value 否 是 String 用来进行迭代的迭代源,否则对象本身将会被放入新的产生的列表中 举例: 下面的例子取回在值栈中的当前对象的getDays()所返回的值, property/>标签打印出当前迭代器的值,代码如下: iteratorvalue="days"> dayis: property/> iterator> 在下面的例子中使用Bean标签并且将它存入ActionContext中。 iterator标签将会从ActionContext中取回对象而后调用它的getDays()方法。 状态属性常常用来创建IteratorStatus对象,在这个例子中,它的odd()方法用来改变行的颜色。 beanname="org.apache.struts2.example.IteratorExample"id="it"> paramname="day"value="'foo'"/> paramname="day"value="'bar'"/> bean> iteratorvalue="#it.days"status="rowstatus"> iftest="#rowstatus.odd==true"> grey"> property/> if> else> property/> else> iterator> 下个例子将进一步展示status属性的使用,使用通过OGNL从action类取得的DAO,成员的迭代以及它们的使用(在安全的上下文中),last()方法中指明了当当前的对象是迭代器的最后一个可用的对象,如果不是,我们需要使用逗号来分隔用户,代码如下: iteratorvalue="groupDao.groups"status="groupStatus"> iftest="#groupStatus.odd==true">odd if> else>even else>"> propertyvalue="name"/> propertyvalue="description"/> iteratorvalue="users"status="userStatus"> propertyvalue="fullName"/> iftest="! #userStatus.last">, if> iterator> Daysoftheweek
iterator>
下一个例子在一个actioncollection上迭代,并且将每一个迭代的值传给另一个action。
这里的诀窍在于使用”[0]”。
它获得当前的值并且将值传入editaction。
使用”[0]”与使用 property/>具有相同的效果(但是,后者,在param标签内部不起作用)。 代码如下所示: actionname="entries"id="entries"/> iteratorvalue="#entries.entries"> propertyvalue="name"/> property/> pushvalue="..."> actionname="edit"id="edit"> paramname="entry"value="[0]"/> action> iterator> 下例使用iterator标签来模拟一个简单的循环,循环了5次,代码如下: iteratorstatus="stat"value="{1,2,3,4,5}"> —获得当前的index(从0开始)--> propertyvalue="#stat.index"/> —获得当前堆栈的值--> —当前的迭代值(0,1,...5)--> propertyvalue="top"/> iterator> 5)merge 描述: 它是MergeIterator标签的组件,它的工作是合并迭代器和对合并后的迭代器的后续调用,它将使得每一个合并的迭代器有机会展示它的元素,接着下一个调用将会允许下一个迭代器来展示它的元素。 一旦最后一个迭代器已展示完它的所有元素,第一个迭代器又能够开始展示它的元素(除非元素已经用尽)。 从内部来说,任务将委托给MergeIteratorFilter去做。 下面展示了3个列表的合并,其中每个列表有3个元素,步骤如下: 1. 展示第一个列表的第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 标签 详解