天天看点

Struts2常用标签总结

Struts2常用标签总结

002

一 介绍

003

1.Struts2的作用   

004

Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。

005

Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用。包括最常用的jsp页面,也可以说Velocity和FreeMarker等模板技术中的使用

006

2.Struts2分类

007

(1)UI标签:(User  Interface, 用户界面)标签,主要用于生成HTML元素标签,UI标签又可分为表单标签非表单标签

008

(2)非UI标签,主要用于数据访问,逻辑控制等的标签。非UI标签可分为流程控制标签(包括用于实现分支、循环等流程控制的标签)和数据访问标签(主要包括用户输出ValueStack中的值,完成国际化等功能的)

009

(3)ajax标签

010

3.Struts2标签使用前的准备:

011

(1)在要使用标签的jsp页面引入标签库:  

012

<%@ taglib uri="/struts-tags" prefix="s"%>

013

(2)在web.xml中声明要使用的标签    这样是struts2 2.3.1.2版本的引入方式

014

<

filter

>

015

<

filter-name

>struts2</

filter-name

>

016

<

filter-class

>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</

filter-class

>

017

</

filter

>

018

4.标签的使用

019

(1)property标签

020

用于输出指定的值:

021

<

s:property

value

=

"%{@cn.csdn.hr.domain.User@Name}"

/><

br

/>

022

<

s:property

value

=

"@cn.csdn.hr.domain.User@Name"

/><

Br

/>

<!-- 以上两种方法都可以 -->

023

<

s:property

value

=

"%{@cn.csdn.hr.domain.User@study()}"

/>

024

以上可以访问某一个包的类的属性的集中方式,study()是访问方法的方法,并输出。

025

026

027

以下用java代码代替的,访问某一个范围内的属性

028

<%

029

//采用pageContext对象往page范围内存入值来 验证#attr搜索顺序是从page开始的 ,搜索的顺序为:page,reques,session,application。

030

set存值的时候存到的是request中,在jsp页面中访问的时候不用加任何的标识符,即可直接访问,如果不同的作用域不一样了,

031

pageContext.setAttribute("name", "laoowang", PageContext.PAGE_SCOPE);

032

%>

033

<

s:property

value

=

"#attr.name"

/>

034

035

036

假设在action中设置了不同作用域的类

037

不同的作用域的标签的访问:

038

039

<

h3

>获取的是requet中的对象值</

h3

>

040

第一种方式:<

s:property

value

=

"#request.user1.realName"

/>

041

<

br

/>

042

第二种方式:<

s:property

value

=

"#request.user1['realName']"

/>

043

<

br

/>

044

第三种方式:<

s:property

value

=

"#user1.realName"

/>

045

<

br

/>

046

第四种方式:<

s:property

value

=

"#user1['realName']"

/>

047

<

br

/>

048

第五种方式:${requestScope.user1.realName }  || ${requestScope.user1['realName'] }

049

050

第六种:<

s:property

value

=

"#attr.user1.realName"

/>

051

attr对象按page==>  request sessionapplictio找的

052

053

054

<

h3

>获取session中的值</

h3

>

055

第一种方式:<

s:property

value

=

"#session.user1.realName"

/>

056

<

br

/>

057

第二种方式:<

s:property

value

=

"#session.user1['realName']"

/>

058

059

060

第五种方式:${sessionScope.user1.realName }  || ${sessionScope.user1['realName'] }

061

062

<

h3

>获取application中的对象的值</

h3

>

063

第一种方式:<

s:property

value

=

"#application.user1.realName"

/>

064

<

br

/>

065

第二种方式:<

s:property

value

=

"#application.user1['realName']"

/>

066

067

068

第五种方式:${applicationScope.user1.realName }  || ${applicationScope.user1['realName'] }

069

070

(2)iterator标签的使用

071

第一种:list集合

072

<!-- 设置set集合  value-->

073

<!-- status 可选属性,该属性指定迭代时的IteratorStatus实例 -->

074

<!-- value="#attr.list"   list存放到了request中  可以value="#request.list"

075

statu.odd返回当前被迭代元素的索引是否是奇数

076

-->

077

<

s:set

name

=

"list"

value

=

"{'a','b','c','d'}"

></

s:set

>

078

<

s:iterator

var

=

"ent"

value

=

"#request.list"

status

=

"statu"

>

079

<

s:if

test

=

"%{#statu.odd}"

>

080

<

font

color

=

"red"

><

s:property

value

=

"#ent"

/>

081

</

font

>

082

</

s:if

>

083

<

s:else

>

084

<

s:property

value

=

"#ent"

/>

085

</

s:else

>

086

</

s:iterator

>

087

088

第二种:map集合中的使用

089

<

h3

>Map集合</

h3

>

090

<!-- map集合的特点:

091

语法格式:# {key:value,key1:value1,key2:value2,.....}  

092

以上的语法中就直接生成了一个Map类型的集合,该Map对象中的每个key-value对象之间用英文的冒号隔开  

093

,多个元素之间用逗号分隔。  

094

-->

095

</

div

>

096

097

<

s:set

var

=

"map"

value

=

"#{'1':'laowang','2':'老王','3':'猩猩'}"

></

s:set

>

098

遍历Map:

099

<

br

/>

100

<

s:iterator

value

=

"#map"

>

101

<

s:property

value

=

"key"

/>:::<

s:property

value

=

"value"

/>

102

<

Br

/>

103

</

s:iterator

>\

104

105

第三种:集合的变量

106

<

h3

>遍历集合:::</

h3

>

107

<

div

>

108

<!-- 遍历出价格大于3000的 -->

109

<

s:iterator

var

=

"user"

value

=

"#session['users']"

>

110

<

s:if

test="%{#user['price']>3000}">

111

<

s:property

value

=

"#user['price']"

/>

112

</

s:if

>

113

</

s:iterator

>

114

115

116

<

hr

color

=

"blue"

/>

<!-- $是取出价格 大于3000的最后一个值 -->

117

<

s:iterator

var

=

"u"

value="#session.users.{$(#this['price']>3000)}">

118

<

s:property

value

=

"price"

/>

119

</

s:iterator

>

120

</

div

>

121

注:users是User的对象,price是User中的一个属性

122

123

简述一下iterator的介绍:

124

iterator标签用于对集合进行迭代,这里的集合包含List、Set和数组。

125

<

s:set

name

=

"list"

value

=

"{'zhangming','xiaoi','liming'}"

/>

126

<

s:iterator

value

=

"#list"

status

=

"st"

>

127

<

font

color=<s:if 

test

=

"#st.odd"

>red</

s:if

><

s:else

>blue</

s:else

>>

128

<

s:property

/></

font

><

br

>

129

</

s:iterator

>

130

value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。

131

id:可选属性,指定集合里元素的id。

132

status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:

133

int getCount(),返回当前迭代了几个元素。

134

int getIndex(),返回当前迭代元素的索引。

135

boolean isEven(),返回当前被迭代元素的索引是否是偶数

136

boolean isOdd(),返回当前被迭代元素的索引是否是奇数

137

boolean isFirst(),返回当前被迭代元素是否是第一个元素。

138

boolean isLast(),返回当前被迭代元素是否是最后一个元素。

139

140

141

(3)if else语句的使用

142

<

s:set

name

=

"age"

value

=

"21"

/>

143

<

s:if

test

=

"#age==23"

>

144

23

145

</

s:if

>

146

<

s:elseif

test

=

"#age==21"

>

147

21

148

</

s:elseif

>

149

<

s:else

>

150

都不等

151

</

s:else

>

152

153

(4)URL标签

154

<!-- 声明一个URL地址 -->

155

<

s:url

action

=

"test"

namespace

=

"/tag"

var

=

"add"

>

156

<

s:param

name

=

"username"

>laowangang</

s:param

>

157

<

s:param

name

=

"id"

>12</

s:param

>

158

</

s:url

>

159

<

s:a

href

=

"%{add}"

>测试URL</

s:a

>

160

<

s:a

action

=

"test"

namespace

=

"/tag"

></

s:a

>

161

以上的两个<

s:a

>标签的作用是一样的。

162

(5)data标签

163

<%

164

pageContext.setAttribute("birth",new Date(200,03,10),PageContext.REQUEST_SCOPE);

165

%>

166

<

s:date

name

=

"#request.birth"

format

=

"yyyy年MM月dd日"

/>

167

<

s:date

name

=

"#request.birth"

nice

=

"true"

/>

168

这个标签是按照format的格式去输出的。

169

170

(6)表单

171

172

173

<

h1

>from表单</

h1

>

174

<

s:form

action

=

"test"

namespace

=

"/tag"

>

175

<

s:textfield

label

=

"用户名"

name

=

"uname"

tooltip

=

"你的名字"

javascriptTooltip

=

"false"

></

s:textfield

>

176

<

s:textarea

name

=

"rmake"

cols

=

"40"

rows

=

"20"

tooltipDelay

=

"300"

tooltip

=

"hi"

label

=

"备注"

javascriptTooltip

=

"true"

></

s:textarea

>

177

<

s:password

label

=

"密码"

name

=

"upass"

></

s:password

>

178

<

s:file

name

=

"file"

label

=

"上传文件"

></

s:file

>

179

<

s:hidden

name

=

"id"

value

=

"1"

></

s:hidden

>

180

181

<!--

182

<select name="edu">

183

<option value="listKey">listValue</option>

184

-->

185

<

s:select

list

=

"#{'1':'博士','2':'硕士'}"

name

=

"edu"

label

=

"学历"

listKey

=

"key"

listValue

=

"value"

></

s:select

>

186

187

<

s:select

list

=

"{'java','.net'}"

value

=

"java"

></

s:select

>

<!-- value是选中的 -->

188

189

<!-- 必须有name -->

190

<

s:checkbox

label

=

"爱好 "

fieldValue

=

"true"

name

=

"checkboxFiled1"

></

s:checkbox

>

191

192

<!-- 多个checkbox -->

193

<

s:checkboxlist

list

=

"{'java','css','html','struts2'}"

label

=

"喜欢的编程语言"

name

=

"box"

value

=

"{'css','struts2'}"

></

s:checkboxlist

>

194

195

196

<!-- map集合前要加# -->

197

<

s:checkboxlist

list

=

"#{1:'java',2:'css',3:'html',4:'struts2',5:'spring'}"

label

=

"喜欢的编程语言"

name

=

"boxs"

value

=

"{1,2}"

></

s:checkboxlist

>

198

199

200

<!-- listKey

201

listValue

202

203

<input type="text" name="boxs" value="listKey">显示值listValue

204

-->

205

206

<!-- radio -->

207

<%

208

//从服务器传过来值

209

pageContext.setAttribute("sex","男",PageContext.REQUEST_SCOPE);

210

pageContext.setAttribute("sex1","男",PageContext.REQUEST_SCOPE);

211

%>

212

<

s:radio

list

=

"{'男','女'}"

name

=

"sex"

value

=

"#request.sex"

></

s:radio

>   

213

214

215

<

s:radio

list

=

"#{1:'男',2:'女'}"

name

=

"sex1"

listKey

=

"key"

listValue

=

"value"

value

=

"#request.sex1"

></

s:radio

>        

216

217

<!-- 防止表单提交的方式 -->

218

<

s:token

></

s:token

>

219

220

<

s:submit

value

=

"提交"

></

s:submit

>

221

</

s:form

>