转载

Struts之标签库

  • 作用: 用于数据的存储和处理

action

  • action标签是用来在JSP页面中调用Action某个Action类的,该标签有如下的几个属性;

  • Id

    该属性用来指定Action的引用id

  • name

    该属性是用来指定Action类的映射地址

  • namespace

    该属性用来指定Action类所在namespace

  • executeResult

    该属性用来指定是否将Action类的处理结果也跳转的那个视图内容包含到本页面中,默认值为false,不包含

  • ignoreContextParams

    该属性用来指定是够将请求的参数传入到Action中,默认为false,即是传入

<h1>调用第一个action</h1>
<!-- 调用登录的Action类,name指定<action>标签的name属性值,executeResult为true指示包含Action响应的内容
		namespace指定Action类所在包指定的namespace
-->
<s:actionname="login"executeResult="true"namespace="/"></s:action>


<hr>
<h1>调用第二个action</h1>
<!-- 调用第二个Action,表示注册页面,ignoreContextParams为true表示不传入参数,那么其中的password和username就不能接收参数了,因此输出为NULL -->
<s:actionname="regist"executeResult="true"namespace="/"ignoreContextParams="true"></s:action>

bean

  • bean标签用来创建一个JavaBean实例,和action标签差不多,就是在jsp页面中调用JavaBean对象,创建一个对象,不过这个对象是存在Stack Context中的,不是值栈中的。

  • id

    用来表示创建的JavaBean类的实例,这个是用来在Stack Context中查看状态的,使用标签

  • name

    用来指定JavaBean,指定JavaBean类所在的路径

  • var

    这个是id一样的功能,其实可以代替id

<s:bean name="com.user.User" id="myBean" >
		<!-- 使用param标签为其赋值 -->
		<s:param name="username" value="'陈加兵'"></s:param>
		<s:param name="age" value="22"></s:param>

		姓名: <s:property value="username"/><br>
		年龄:<s:property value="age"/>
</s:bean>

date

  • date标签用于格式化一个日期,除了格式化输出当前的日期,也可以计算指定的日期和当前日期时刻之间的时差

  • format

    可选属性,用于指定格式化的格式,如yyyy/MM/dd-HH:mm:ss

  • name

    必填的值,该属性指定格式化日期的值,比如Date对象

  • nice

    可选属性,如果为true那么将会输出指定日期和当前日期的时差,默认为false

  • timezone

    可选属性,指定格式化所用的时区

  • var

    可选属性,如果指定了该属性,该时间对象将放入值栈中,可以使用id代替,但是推荐使用var

  • 如果同时指定了nice=true,和format那么format将会失效
<!-- 创建一个日期对象now,表示当前的时间 -->
	<s:set var="now" value="new java.util.Date()"></s:set>
	<!--  格式化当前的日期-->
	<s:date name="#now" format="dd/MM/yyyy HH:mm:ss"/><br>

debug

  • 该标签是辅助标签,用来生成一个超链接,便于查看值栈,和Stack Context中的信息。

i18n

  • 主要用于在视图上加载国际资源,使用该标签时需要指定一个name属性,该name属性为需要加载的国际化资源文件的basename

include

  • 将指定的jsp文件或者Servlet文件包含在当前的jsp页面,这个相当于 标签。

  • value

    指定被包含的jsp或者Servlet文件路径

<s:include value="success.jsp"></s:include>

param

  • param标签主要是为其他的标签提供参数的
  • 注意value的值是使用的OGNL表达式,一定要注意,如果指定字符串要加单引号或者双引号

  • name

    指定要赋值的变量名

  • value

    指定变量的值

<s:bean name="com.user.User" id="myBean" >
		<!-- 使用param标签为其赋值 -->
		<s:param name="username" value="'陈加兵'"></s:param>
		<s:param name="age" value="22"></s:param>
</s:bean>

push

  • push标签用于将某个值放到ValueStack(值栈)中,从而更简单的访问该值,其实不将其防放置在值栈中也是可以访问,使用#即可。只有一个属性value就是需要放在栈顶的值
<s:bean name="com.user.User" id="myBean">
		<s:param name="username" value="'陈加兵'"></s:param>
		<s:param name="age" value="22"></s:param>
</s:bean>

<%-- 只有在push标签内是,被放到值栈中的对象才存在,一旦出了push标签那么就不存在了 --%>
	<s:push value="#myBean">
		<s:property value="username"/>
		<s:property value="age"/>
		<!-- 这个可以看出值栈中有值 -->
		<s:debug></s:debug>
	</s:push>
	<!-- 这个没有myBean对象 -->
	<s:debug></s:debug>

set

  • set标签是用来将某一个值放入指定的范围,当然也是相当于创建一个新的变量

  • id

    该属性用来指定该元素的引用ID(废弃)

  • var

    该属性用来指定创建的新变量的名称

  • value

    用来指定变量的值,这个是使用的OGNL表达式

  • scope

    该属性用来指定新变量的放置范围,可选值有page,request,session,application和action,如果没有指定该属性,则默认放在Stack Context中

<s:set var="x" value="'陈加兵'"></s:set>
<s:property value="#x"/>
  • 获取指定范围的值,其实相当于在指定的范围内绑定属性值,可以实现数据共享:
<s:set var="x" value="'陈加兵'" scope="session"></s:set>
<s:property value="#session.x"/>
  • 其实set的真正的作用是变量放置在指定的范围内,如果一个属性的访问的太繁琐了,比如访问user.name,但是这个值需要频繁的使用,这时就创建一变量存放这个值,并且设定范围:
<s:set var="x" value="user.name"></s:set>
<s:property value="#x"/>

url

  • url标签用于在页面生成一个url地址,该标签的属性如下:

  • id

    指定该元素的引用id,如果指定了该属性,那么在Stack Context中就会有这个id,那么就可以使用#来获取它的值

  • value

    该属性用来指定生成URL地址,如果不指定该属性,那么action属性指定的Action作为URL地址

  • action

    该属性用来指定生成URL地址值的action,如果不指定该属性,那么使用value属性值作为URL地址值

  • method

    该属性用来指定使用action的方法

  • encode

    该属性用来指定是否需要encode请求参数,默认值为true

  • includeParams

    该属性用来指定是否包含请求参数,可选值为:none,get,和all默认的为none

  • includeContext

    该属性指定是否需要当前上下文包含在url地址中

  • anchor

    该属性指定URL的锚点

  • Scheme

    该属性用来指定URL使用的协议(HTTP或者HTTPS)

  • namespace

    该属性用来指定命名空间,使用action的时候指定

<s:url value="success.jsp" includeParams="get" id="myUrl">
	<s:param name="username" value="'陈加兵'"></s:param>
</s:url>
<hr>
<s:url action="login"></s:url>
<hr>

<s:url action="login" namespace="/user" includeParams="get">
	<s:param name="username" value="'陈加兵'"></s:param>
</s:url>

<hr>
<!-- 获取值 -->
<s:property value="#myUrl"/>

property

  • property标签是用来在页面中输出指定值,该标签有如下属性:

  • id

    指定该元素的标识(废弃)

  • value

    指定需要输出的特定的值,注意这里使用的OGNL表达式,如果没有指定value属性,那么将会输出值栈中的栈顶的值

  • escape

    指定是否转义输出内容中HTML,其默认值为true

  • default

    指定一个默认的输出值,如果value中的值为空,那么就会默认输出这个值

<!-- 转义标签h1,输出内容 -->
<s:property value="'<h1>陈加兵</h1>'" escape="false"/>
<!-- 输出Stack Context中的内容,并且指定了默认值 -->
<s:property value="#username"  default="输出一个默认值"/>
<!-- 输出栈顶的值 -->
<s:property/>

总结

  • 数据标签最重要的就是 set , property , debug , i18n 这些标签,其他的了解写即可

控制标签

  • 控制标签主要用于条件和循环等流程控制

if/elseif/else

  • 其中elseif允许出现多次
<s:set var="age" value="22"></s:set>
<s:if test="#age>10">
	<s:property value="#age+'大于10'" />
</s:if>
<s:elseif test="#age>20">
	<s:property value="#age+'大于20'" />
</s:elseif>
<s:else>
	<s:property value="#age+'在10与20之间'" />
</s:else>
  • 并且和或的关系(&&,||)
<%-- 新建一个集合list --%>
<s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set>
<%-- 指定begin,end获取前3个元素--%>
<s:iterator value="#list" var="item" status="iter">
	<s:if test="#iter.isOdd()&&#iter.getIndex()>0">
		<s:property value="#item+'---'+#iter.getIndex()"/>
		<br>
	</s:if>
</s:iterator>

iterator

  • iterator标签主要用于对集合进行迭代,这里的集合包含list,Set和数组,也可以对Map集合进行迭代输出。

  • value

    可选属性,该属性指定迭代的集合,如果没有指定value属性,那么就会迭代ValuStack栈顶的集合。

  • var

    可选属性,该属性指定的是迭代的集合中的每一个元素,放在Stack Context中·

  • status

    可选属性,该属性指定迭代对象的IteratorStatus实例存放在Stack Context中,通过这个属性可以判断当前迭代元素的属性。例如是否为最后一个,以及当前元素的索引

  • begin

    可选属性,指定从迭代对象第几个元素开始迭代

  • end

    可选属性,指定迭代到对象的第几个元素结束

  • step

    可选属性,指定步长

  • 如果迭代元素指定了status,那么就可以调用如下的属性查看迭代元素的当前的属性,可以调用如下的几个方法查看:
    • int getCount() 返回当前迭代了几个元素
    • int getIndex() 返回当前迭代元素的索引
    • boolean isEven() 当前迭代元素的索引是否为偶数
    • boolean isFirst() 当前迭代元素是否为第一个元素
    • boolean isLast() 当前迭代元素是否为最后一个元素
    • boolean isOdd() 判断当前的迭代元素的索引是否为奇数
  • 此标签每次进行迭代的时候就会把元素放在值栈的顶部,那么我们都知道 如果不指定value属性,那么默认的就是从栈顶取元素:
<%-- 新建一个集合list --%>
	<s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set>

	<%--指定了value属性,但是其他属性都没有,那么直接可以从栈顶取数据 --%>
	<s:iterator value="#">
		<s:property/>
	</s:iterator>
  • 指定var属性来获取迭代对象的值:

    <%-- 新建一个集合list --%>
    	<s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set>
    <%-- 指定var表示当前迭代对象的每一个元素--%>
    	<s:iterator value="#list" var="item">
    		<%-- 因为var元素是放在Stack Context中,因此可以使用#取值 --%>
    		<s:property value="#item" />
    	</s:iterator>
    
  • 指定begin,end来获取指定范围的值。

<%-- 新建一个集合list --%>
	<s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set>

	<%-- 指定begin,end获取前3个元素--%>
	<s:iterator value="#list" var="item" begin="0" end="2">
	<%-- 因为var元素是放在Stack Context中,因此可以使用#取值 --%>
		<s:property value="#item" />
	</s:iterator>
  • 指定status获取每一个迭代元素的当前状态:
<%-- 新建一个集合list --%>
	<s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set>

	<%-- 指定begin,end获取前3个元素--%>
	<s:iterator value="#list" var="item" status="iter">
		<s:if test="#iter.isOdd()&&#iter.getIndex()>0">
			<s:property value="#item+'---'+#iter.getIndex()"/>
			<br>
		</s:if>
	</s:iterator>
  • 迭代Map
<s:set var="map" value="#{'age':22,'username':'陈加兵' }"></s:set>
<s:iterator value="#map" var="item">
	获取集合中的key:<s:property value="#item.key"/>
	获取集合中的值:<s:property value="#item.value"/>
</s:iterator>

append

  • append标签用于将多个集合拼接起来形成一个新的集合。

  • var

    拼接之后形成的新的集合,放在Stack Context中

  • id

    这个和var是一样的,两个可以互换使用的,不过推荐使用var

<%-- 新建一个集合list --%>
<s:set var="list1" value="{'陈加兵','郑元梅',22,33}"></s:set>
<s:set var="list2" value="{44,55,6,99}"></s:set>

<s:append var="list3">
	<%-- 使用param标签指定要拼接的集合 --%>
	<s:param value="#list1"></s:param>
	<s:param value="#list2"></s:param>
</s:append>

<s:iterator value="#list3" var="item">
	<s:property value="#item"/>
</s:iterator>

generator

  • 使用这个标签可以将字符串按照指定的分隔符分割成多个子串,临时生成的子串可以使用 标签迭代输出。可以这样理解:这个标签使用指定的的分隔符将字符串分割,然后这些字符串组成一个集合。

  • val

    必选属性,该属性指定被解析的字符串

  • var

    可选属性,如果指定了该属性,那么生成的Iterator对象将会以这个名称放在Stack Context中,就可以访问这个集合了。

  • count

    可选属性,该属性指定生成集合中元素的个数

  • separator

    必选属性,这个属性指定分隔符

  • converter

    可选属性,该属性指定一个转换器,该转换器负责将集合中的每一个字符串转换成对象,通过该转换器可以将一个字符串解析成对象集合。该属性值必须是org.apache.struts2.util.IteratorGenerator.Convertere

<%--分隔符为',',并且选取其中的前两个元素 --%>
	<s:generator separator="," val="'陈加兵,郑元梅,chenjiabing'" var="x" count="2"></s:generator>

	<s:iterator value="#x" var="item">
		<s:property value="#item" />
	</s:iterator>

merge

  • merge这个标签和append的功能是一样的,都是将两个集合拼接在一起,但是append是将一个集合拼接在另外一个集合的末尾,但是merge是将后面一个集合的对应索引的元素添加到前面一个集合的索引所在的位置,也就是后面集合的第一个元素变成了新集合的第二个元素了。
<s:set var="list1" value="{'陈加兵','郑元梅'}"></s:set>
	<s:set var="list2" value="{1,2}"></s:set>

	<s:merge var="list3">
		<s:param value="#list1"></s:param>
		<s:param value="#list2"></s:param>
	</s:merge>


	<s:iterator var="item" value="#list3">
		<s:property value="#item"/>
	</s:iterator>

subset

  • subset标签用于取得集合的子集,形成新的集合。

  • count

    可选属性,指定选取集合的子集的个数,如果不指定该属性,那么默认的就是截取全部的元素

  • source

    可选属性,该属性指定源集合,如果没有指定,那么默认是从栈顶取集合

  • start

    可选属性,该属性指定子集从源集合的第几个元素开始截取,默认从第一个开始(即start=0)

  • decider

    可选属性,该属性有开发真决定是否选中该元素

  • var

    可选属性,如果指定了该属性,那么生成Iterator对象设置成为Page范围内的属性,可以使用#attr.name获取其值,也可以替换成id,但是推荐使用var

<!-- 创建一个集合 -->
	<s:set var="list1" value="{'陈加兵','郑元梅',1,2,3}"></s:set>

	<!--  指定变量为x,存储在page中,源集合为list1,截取其中的两个元素,从第二个元素开始截取 -->
	<s:subset var="x" source="#list1" count="2" start="1"></s:subset>

	<!-- 由于x存储在Page中,因此使用#attr.x来获取 -->
	<s:iterator value="#attr.x" var="item">
		<s:property value="#item" />
	</s:iterator>

sort

  • 主要用于对集合进行排序

  • comparator

    必填属性,该属性指定进行排序的实例,必须实现java.util.Comparator接口

  • source

    可选属性,这是一个源集合,如果没有指定,那么就拿栈顶的集合进行排序

  • var

    可选属性,如果指定了属性,那么生成的Iterator对象设置成Page范围的属性,该属性也可替换成id

<s:set var="list" value="{'陈加兵','123459999+','4442555'}"></s:set>
	<!-- 创建一个实例 -->
	<s:bean name="com.compare.Compare" id="compare"></s:bean>
	<!-- 排序 -->
	<s:sort comparator="#compare" source="#list" var="x"></s:sort>

	<!-- 迭代输出 -->
	<s:iterator var="item" value="#attr.x">
		<s:property value="#item" />
	</s:iterator>
原文  https://chenjiabing666.github.io/2018/04/12/Struts之标签库/
正文到此结束
Loading...