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> |
Struts2标签库精讲
本文详细介绍了Struts2框架中的标签库使用方法,包括property、iterator、ifelse等标签的功能与应用场景,并深入探讨了表单标签如何提高前端开发效率。
262

被折叠的 条评论
为什么被折叠?



