Struts2标签小结

前边总结Struts2的时候将标签这一部分给丢了,当时因为开发的时候很少使用,这里简单总结一下。先看一下Struts2标签的分类吧。然后分类总结一下即可。

由于控制标签用的比较多,所以放在了前边。好首先看一下控制标签吧。

一,控制标签,JSTL大家应该都使用过,其实Struts2的控制标签和那个特别像的,主要是对EL表达式满足不了的进行补充使用。这里简单看一下吧:

1, if……elseif……else,用来控制选择输出的标签;

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>s:if标签测试</title>
</head>
<body>
<!-- 在Stack Context中定义一个age属性,其值为29 -->
<s:set name="age" value="29"/>
<!-- 如果Stack Context中的age属性大于60 -->
<s:if test="#age>60">
	老年人
</s:if>
<!-- 如果Stack Context中的age属性大于35 -->
<s:elseif test="#age>35">
	中年人
</s:elseif>
<!-- 如果Stack Context中的age属性大于15 -->
<s:elseif test="#age>15">
	青年人
</s:elseif>
<s:else>
	少年
</s:else>
</body>
</html>

2,append:用于将多个集合拼接成一个新的集合;

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:append标签拼接集合和Map</title>
</head>
<body>
<!-- 使用append将List和Map集合拼接在一起
	新集合实际上是Map集合,其名字为newList -->
<s:append var="newList">
	<s:param value="#{‘Java‘:‘ljh‘,
		‘C#‘:‘lsz‘}" />
	<s:param value="#{‘0629‘,
		‘0404‘}" />
</s:append>
<table border="1" width="280">
<!-- 使用iterator迭代newList集合 -->
<s:iterator value="#newList" status="st">
	<tr <s:if test="#st.odd">
		style="background-color:#bbbbbb"</s:if>>
		<td><s:property value="key"/></td>
		<td><s:property value="value"/></td>
	</tr>
</s:iterator>
</table>
</body>
</html>

3,generator:是一个字符串解析器,用于将一个字符串解析成一个集合;

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:generator生成集合</title>
</head>
<body>
<table border="1" width="240">
<!-- 使用generator标签将指定字符串解析成Iterator集合
	在generator标签内,得到的List集合位于ValueStack顶端 -->
<s:generator val="‘Java
	,C#,
	C++‘" separator=",">
<!-- 没有指定迭代哪个集合,直接迭代ValueStack顶端的集合 -->
<s:iterator status="st">
	<tr <s:if test="#st.odd">
		style="background-color:#bbbbbb"</s:if>>
		<td><s:property/></td>
	</tr>
</s:iterator>
</s:generator>
</table>
</body>
</html>

4,iterator:是一个迭代器,用于将集合迭代输出,这个比较使用哈,前边都有,不再举例;

5,merge:也是用于将多个集合拼接成一个新的集合,但是与append不同。append是将集合依次排列进行拼接,merge是第一个集合的第一个,第二个集合的第一个……第一个集合的第二个,第二个集合的第二个……;

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:merge标签迭代Map</title>
</head>
<body>
<s:merge id="newList">
	<s:param value="#{‘Java‘:‘ljh‘,
		‘C#‘:‘lsz‘}" />
	<s:param value="#{‘0629‘,
		‘0404‘}" />
</s:merge>

<table border="1" width="320">
<s:iterator value="#newList" status="st">
	<tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
		<td><s:property value="key"/></td>
		<td><s:property value="value"/></td>
	</tr>
</s:iterator>
</table>
</body>
</html>

6,sort:这个标签用于将集合进行排序;

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:sort对集合元素进行排序</title>
</head>
<body>
<!-- 定义一个Comparator实例 -->
<s:bean var="mycomparator" name="org.ljh.app.util.MyComparator"/>
<!-- 使用自定义的排序规则对目标集合进行排序 -->
<s:sort source="{‘Java‘
	,‘C#‘
	,‘C++‘
	,‘Ajax‘
	,‘XML‘}"
	comparator="#mycomparator"
	var="sortedList"/>
输出page范围的sortedList属性:<br/>
${pageScope.sortedList}
<table border="1" width="300">
<!-- 迭代page范围内的sortedList属性 -->
<s:iterator status="st" value="#attr.sortedList">
	<tr <s:if test="#st.odd">
		style="background-color:#bbbbbb"</s:if>>
		<td><s:property/></td>
	</tr>
</s:iterator>
</table>
</body>
</html>
public class MyComparator implements Comparator
{
	//决定两个元素大小的方法
	public int compare(Object element1, Object element2)
	{
		//根据元素字符串长度来决定大小
		return element1.toString().length()
			- element2.toString().length();
	}
}

7,subset:这个标签用于截取集合的部分元素,形成新的子集合。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:subset标签截取集合元素</title>
</head>
<body>
<!-- 定义一个Decider Bean -->
<s:bean var="mydecider" name="org.ljh.app.util.MyDecider"/>
<!-- 使用自定义的Decider实例来截取目标集合,生成子集
	指定var属性,将生成的Itertor放入pageScope中 -->
<s:subset source="{‘Java‘
	,‘C#‘
	,‘C++‘
	,‘Ajax‘
	,‘XML‘

}" decider="#mydecider"var="newList"/>直接输出page范围的newList属性:<br/>${pageScope.newList}<table border="1" width="240"><!-- 迭代page范围内的newList属性 --><s:iterator status="st" value="#attr.newList"><tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>><td><s:property/></td></tr></s:iterator></table></body></html>

//用户自定义的Decider类,实现了SubsetIteratorFilter.Decider接口
public class MyDecider
	implements SubsetIteratorFilter.Decider
{
	//实现Decider接口必须实现的decide方法,
	//该方法决定集合中的元素是否被选入子集
	public boolean decide(Object element) throws Exception
	{
		String str = (String)element;
		//如果集合元素(字符串)中包含Java EE子串,即可被选入子集
		return str.indexOf("Java") > 0;
	}
}

二,数据标签,自我感觉数据标签用的不是很多:

action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.

如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中.

使用action标签指定属性有:

id: 可选属性,作为该Action的引用ID

name:必选属性,指定调用Action

namespace:可选属性,指定该标签调用Action所属namespace

executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.

<s:actionname="actionTag!default" executeResult="true"namespace="/generic/dataTag">

<paramname="username" value="  "/>给action属性复制

<paramname="email"        value="  "/>

</s:action>

bean 实例化一个javabean 使用Param传入属性 (get/set)

name 实例化的javabean的实现类

var可选  指定则实例放入栈的上下文 允许用var直接使用

注意:bean标签内创建javabean实例位于栈顶,bean结束移除值栈,除非指定var则通过上下文访问

date格式化输出日期,指定日期与当天日期的时间差

formart   指定格式格式日期       注意:不欲nice同时指定,如果同时指定。则忽略formart

nice  是否指定日期与当前日期差值

name必填  格式化的日期值

var  对象放入值栈,在date结束可以通过该属性的值引用

<constanname="sruts.custom.i18n.resources"value="ApplicationResources" />

<s:datename="#date" formart="yyyy年MM月dd日"/>

debug标签:

用于辅助调试.在页面上生成超链接,可以查看值栈,和StackContext中所有信息

id 钙元素的一个引用id

include:讲一个jsp或者servlet包含到当前页面

value  包含的JSP或Servlet。

可以指定多个param子标签传参

param标签:为其它标签提供参数

name设置的参数的名字 (set)  value设置的参数的值

用法①<paramname="color">

②<paramname="color" value="   ‘color‘   "/>

push:将某个值放到值栈的栈顶

value必填:指定放入值栈的栈值!但是只在push标签内,一旦超出,刚刚放入的对象立即被移除

用法:

<s:pushvalue="#session.user">

<s:propertyvalue="username">

<s:propertyvalue="sex">

<s:propertyvalue="emai">

</s:push>

set:用于将某个只放入指定范围内

定义一个新变量。将已有值放入新变量。并放入指定范围

value  指定一个表达式,计算的结果赋变量,如果没有指定value属性,默认将栈顶对象赋给变量。

var  指定该属性,改值放入到值栈中

scope指定新变量防止的范围,可选application,session request page action(默认)  如果指定为action放入request并放入action值栈

name变量名字

i18n  text标签  支持国际化信息

i18n将资源包放入值栈   name资源属性名字   指定资源包的基名

text从资源包中获取信息 title   获取键为title的消息

通过i18n放入的资源包只能在标签体内访问

text可以单独使用。首先查找资源包的基名与调用action类名相同的资源包,意味着,可以在action类所在的包中创建与Action类名相同的的资源文件,可以嵌套param指定消息文本的参数,顺序对应参数索引顺序

<s:i18nname="AppliactionResources">

<s:textname="title"/>    name资源属性名字   id指定属性,文本内容不会输出,而是保存在值栈中,在text结束后,可以通过属性的值来引用

</s:i18n>

public class TextTagAction  extends ActionSupport{}   《topic-21》

url标签用于创建URL地址,定义param附加请求参数

action value  指定生成URL的Action和URL。前一个会附加.action。如果两个都没有则以当前地址为地址值

achor 可选  指定url的锚点

encode 可选   对指定参数进行编码 不支持cookie改写url支持session

escapeamp  是否将&转义为&amp

var  将链接值放入到值栈

includeContext是否将当前上下文包含在URL地址

includeParams是否包含请求参数,改属性值只能为none,getall

method 指定使用action的方法

namespace指定action所属的命名空间

portletmode指定portle模式

scheme指定url使用的协议

property标签,用于输出值栈中的对象的属性值

value指定要输出的对象属性  没有则输出栈顶

default  可选   value为null输出改值

escape 是否专一输出内容中的html

三,表单标签,这个就是form下的Struts2提供的标签,供界面显示用的,其实用的更少,一般情况下,我们都会拿easy-ui,dwz等一些专门做界面的框架进行替换。其实说简单一点就像HTML里边的各种标签,这里不再进行赘述,用的时候我们上网上查即可,这里提供网上的一些,大家可以看下:

Struts2常用表单标签

四,非标单标签,主要用于生成一些非表单的可视化元素,例如tab页面,输出HTML页面的树形结构等,当然也用来显示Action里封装的信息。简单介绍一下:


标签名


含义


actionerror


如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法的返回的信息。


actionmessage


和上边一样,用于返回GetActionMessage()的信息


component


用于生成一个自定义组件。可以利用写好模版,主题等


fielderror


如果Action实例存在表单域的类型转换错误,校验错误,该标签负责输出这些错误信息。

简单看一个componet标签:

<html>
<head>
	<title>使用s:component标签</title>
</head>
<body>
<h3>使用s:component标签</h3>
使用默认主题(xhtml),默认主题目录(template)<br/>
使用mytemplate.jsp作为视图组件
<s:component template="mytemplate.jsp">
	<s:param name="list" value="{‘Java‘
	,‘C#‘
	,C++‘}"/>
</s:component>
<hr/>
使用自定义主题,自定义主题目录<br/>
使用myAnotherTemplate.jsp作为视图组件
<s:component
	templateDir="myTemplateDir"
	theme="myTheme"
	template="myAnotherTemplate.jsp">
	<s:param name="list" value="
	{‘Java‘
	,‘C#‘
	,C++‘}"/>
</s:component>
</body>
</html>

这是Struts2标签的简单总结,我们可以在使用中不断熟练,但是前提我们得知道这些东西。即所谓的那句话,不怕不知道,就怕不知道。

时间: 2024-10-02 19:28:25

Struts2标签小结的相关文章

Struts2中s:set标签和s:if标签小结

1.  s:set标签 格式:<s:set name="" value="" scope=””/> 说明:把jsp页面中的一个值,以name存储起来.Scope存储的范围是在application.session.request.page…….默认是存储在该action中. 用法①:<s:set name="miloList" value="{‘java’,’php’,’C#’}"/> 这个值是一个li

(五)Struts2 标签

所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:Struts2 标签简介 Struts2 自己封装了一套标签,比JSTL 强大,而且与Struts2 中的其他功能无缝结合. 当然Strust2 标签的内容很多,随着版本的升级,标签和属性越来越多.我们要掌握好核心标签及了解其他标签. 根据功能可以分为:数据标签,控制标签,界面标签,其他标签. 第二节:Struts2 数据标签 Property 标签:输出OGNL 表达

18.如何自学Struts2之Struts2标签和集成初略总结篇

18.如何自学Struts2之Struts2标签和集成初略总结篇[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

JAVAEE——struts2_04:自定义拦截器、struts2标签、登陆功能和校验登陆拦截器的实现

一.自定义拦截器 1.架构 2.拦截器创建 //拦截器:第一种创建方式 //拦截器生命周期:随项目的启动而创建,随项目关闭而销毁 public class MyInterceptor implements Interceptor{} //创建方式2: 继承AbstractInterceptor -> struts2的体贴 //帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法 public class MyInterceptor2

用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量.<s:iterator>标签有一个value属性,用来存放在Action类的方法中存数据的list集合,还有一个id,好像是说指定集合的索引的意思,就是给list集合遍历出来的每个对象加上一个数字标签,反正我是这么理解的,没用过.还有一个很重要,就是var变量,我在s:iterator按ctr

Struts2(十)OGNL标签二与Struts2标签

一.Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持.极大简化了视图页面的编写 不依赖任何表现层技术 Struts2标签的分类: 通用标签(Generir Tags) 数据标签(Data Tags) 控制标签(Control Tags) UI标签(UI Tags) Ajax标签(Ajax Tags) 二.数据标签 web.xml <filter> <filter-name>struts2</

Struts2标签--控制标签

参考博客:http://www.open-open.com/lib/view/open1342167592890.html Struts2标签库 包括: OGNL Struts2标签分类 控制标签 :(if, elseif,else, iterator, append, merge, generator, subset, sort) 数据标签 :(bean, param,date, debug, include, set, url, push) 控制标签: (1): If elseif  els

[Java]Struts2标签

http://www.open-open.com/lib/view/open1331393920452.html Struts2常用标签总结 一 介绍 1.Struts2的作用    Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求.     Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依

Struts2标签与Jsp的嵌入Java代码之间的变量相互引用

新年的第一天,对programer来说,和往常相比并没有太大不同,代码照样敲.做了一天键盘侠,不见得有什么出彩的成就(其实一直以来似乎都是这样/(ㄒoㄒ)/~~),倒是被曾经绊住的问题再次绊住然后纠结地解决了,顺便复习了一下.问题就是在Struts2标签和Jsp的Java代码直接实现了变量相互引用. 情景1:有一个在valuestack里面有一个变量,而我们目标除了获得这个值之外,还可能会更改它的值,这个操作可能是通过webservice,service.dao等进行,而这些操作都要进行Java