第15章struts2标签讲解.docx
《第15章struts2标签讲解.docx》由会员分享,可在线阅读,更多相关《第15章struts2标签讲解.docx(12页珍藏版)》请在冰豆网上搜索。
![第15章struts2标签讲解.docx](https://file1.bdocx.com/fileroot1/2022-12/1/4aab53e6-166b-442e-8629-f6a4e3869df7/4aab53e6-166b-442e-8629-f6a4e3869df71.gif)
第15章struts2标签讲解
Struts标签:
1.通用标签:
(1)property
(2)bean
(3)param
(4)debug
2.控制标签:
(1)ifelseifelse
(2)iterator
一、property标签
类似于上节课的例子,
1.在WebRoot下新建一个index_tags.jsp:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
MyJSP'index.jsp'startingpage访问属性:
//localhost:
8080/ch2_example1/test/tags.action?
username=aaa&password=bbb">tags
2.新建一个my.tags.TagsAction:
packagemy.tags;
importcom.opensymphony.xwork2.ActionSupport;
publicclassTagsActionextendsActionSupport{
privateStringusername;
privateStringpassword;
publicStringexecute(){
this.addFieldError("fielderror.test","wrong!
");
returnSUCCESS;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
3.修改struts.xml:
/WEB-INF/page/tags.jsp
4.在WEB-INF/page下新建tags.jsp:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
MyJSP'tags.jsp'startingpage- property:
propertyvalue="username"/>
- property赋值为字符串:
propertyvalue="'username'"/>
- property设为默认值:
propertyvalue="admin"default="管理员"/>
- property设定HTML:
propertyvalue="'
'"escape="true"/>
测试:
在地址栏输入:
http:
//localhost:
8080/ch2_example1/index_tags.jsp
点击超链接tags
得到下面的结果:
1.property:
aaa
2.property赋值为字符串:
username
3.property设为默认值:
管理员
4.property设定HTML:
解释:
property:propertyvalue="username"/>
这个用法上节课已经讲过,不解释了。
property赋值为字符串:propertyvalue="'username'"/>
这是把username作为字符串处理。
property设为默认值:propertyvalue="admin"default="管理员"/>
这是给admin赋默认值,如果admin有值,则取它的值显示,如果没有,则显示默认值。
property设定HTML:propertyvalue="'
'"escape="true"/>
如果把escape改为false,则将对
进行解析。
2、Bean标签:
Bean标签用于创建一个JavaBean的实例,创建实例时通过param/>给JavaBean传入参数。
如果通过param/>给JavaBean传入属性值则需要给JavaBean设置Setter方法,如果需要访问JavaBean的属性则需要设置Getter方法。
Bean标签有两个属性:
1.Name:
必填的属性,指定需要实例化的Java类
2.Var:
可选项。
如指定了该属性,则该JavaBean实例会被放入StackContext中(不是ValueStack),从而允许直接通过该var属性来访问该JavaBean的实例。
新建Person类
packagemy.ognl;
publicclassPerson{
privateStringname;
privateStringmajor;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetMajor(){
returnmajor;
}
publicvoidsetMajor(Stringmajor){
this.major=major;
}
publicStringmethod1(){
return"来自JavaBean的方法";
}
publicStringmethod1(Stringname){
returnname+"来自JavaBean的方法";
}
}
新建index1.jsp:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
">
MyJSP'index1.jsp'startingpage
--
-->
beanname="my.ognl.Person">
paramname="name"value="'zhangsan'">
param>
mynameis:
propertyvalue="name"/>
bean>
访问该jsp,得到结果为:
修改index1.jsp:
beanname="my.ognl.Person"var="person">
paramname="name"value="'zhangsan'">
param>
bean>
mynameis:
propertyvalue="#person.name"/>
得到的结果是一样的。
如果想访问JavaBean中的方法,修改index1.jsp:
beanname="my.ognl.Person"var="person">
paramname="name"value="'zhangsan'">
param>
bean>
mynameis:
propertyvalue="#person.name"/>
propertyvalue="#person.method1()"/>
propertyvalue="#person.method1('ooo')"/>
测试结果为:
在tags.jsp中加入,通过debug标签查看结果
定义bean:
beanname="my.ognl.Dog">
bean>
定义bean:
beanname="my.ognl.Dog"var="mydog">
paramname="name"value="'dagou'">
param>
bean>
debug>
debug>
在tags.jsp中加入以下语句:
查看结果及值栈内容:
定义bean:
beanname="my.ognl.Dog">
paramname="name"value="'xiaogou'">
param>
propertyvalue="name"/>
debug>
debug>
bean>
结果为:
注意:
bean>开始的时候,新建对象,放到栈顶。
执行结束,对象就不在栈中了。
所以一定要在bean>中赋值和取值,否则取不到。
如果想在bean>执行完之后还能使用,就用var。
修改var这一部分:
定义bean:
beanname="my.ognl.Dog"var="mydog">
paramname="name"value="'dagou'">
param>
bean>
取狗的名字:
propertyvalue="#mydog.name"/>
注意:
此时mydog是放在了ActionContext中,可以通过#取出来。
三、fielderror标签
修改tags.jsp
fielderrorfieldName="fielderror.test"theme="simple">
fielderror>
查看输出结果。
四、if、elseif、else标签
修改tags.jsp:
if,elseif,else:
age=
propertyvalue="#parameters.age"/>
在地址栏输入:
http:
//localhost:
8080/ch2_example1/test/tags.action?
username=aaa&password=bbb&age=8&age=10
得到一个集合
if,elseif,else:
age=8,10
如果希望得到集合中的第一个值,则写为:
if,elseif,else:
age=
propertyvalue="#parameters.age[0]"/>
在刚才的基础上使用分支控制标签:
if,elseif,else:
age=
propertyvalue="#parameters.age[0]"/>
iftest="#parameters.age[0]<0">wrongdata
if>
elseiftest="#parameters.age[0]<18">stillchild
elseif>
else>mrright!
else>
修改地址栏传入的年龄值,查看不同的结果。
继续修改tags.jsp:
如果没有aaa这个属性,则可以这样判断:
iftest="#parameters.aaa==null">aaaisnull
if>
五、iterator标签
遍历集合:
iteratorvalue="{1,2,3}">
property/>|
iterator>
自定义变量:
iteratorvalue="{'aaa','bbb','ccc'}"var="x">
propertyvalue="#x.toUpperCase()"/>|
iterator>
1.遍历集合:
1|2|3|
2.自定义变量:
AAA|BBB|CCC|
使用status:
iteratorvalue="{'aaa','bbb','ccc'}"status="status">
property/>|
遍历的元素个数:
propertyvalue="#status.count"/>
遍历的元素索引:
propertyvalue="#status.index"/>
遍历的是否偶数:
propertyvalue="#status.even"/>
遍历的是否奇数:
propertyvalue="#status.odd"/>
遍历的是否第一个?
propertyvalue="#status.first"/>
遍历的是否最后一个?
propertyvalue="#status.last"/>
iterator>
输出结果为:
1.使用status:
aaa|遍历的元素个数:
1遍历的元素索引:
0遍历的是否偶数:
false遍历的是否奇数:
true遍历的是否第一个?
true遍历的是否最后一个?
false
bbb|遍历的元素个数:
2遍历的元素索引:
1遍历的是否偶数:
true遍历的是否奇数:
false遍历的是否第一个?
false遍历的是否最后一个?
false
ccc|遍历的元素个数:
3遍历的元素索引:
2遍历的是否偶数:
false遍历的是否奇数:
true遍历的是否第一个?
false遍历的是否最后一个?
true
修改tags.jsp:
映射:
iteratorvalue="#{1:
'a',2:
'b',3:
'c'}">
propertyvalue="key"/>|propertyvalue="value"/>
iterator>
映射:
iteratorvalue="#{1:
'a',2:
'b',3:
'c'}"var="x">
propertyvalue="#x.key"/>|propertyvalue="#x.value"/>
iterator>
结果为:
映射:
1|a2|b3|c
映射:
1|a2|b3|c
【作业】
设计一个jsp页面,要求包含以下标签,该页面的主题自定。
checkbox、checkboxlist、combobox
date、doubleselect、label
password、radio
reset、select
text、textarea、textfield
要求查阅struts文档,将这些标签的介绍和属性也要写在大作业中。