示范代码:
ahref="login.action">登陆
a>
2.action
使用action标签 可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。
如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。
action标签的属性:
id:
可选属性,该属性将会作为该Action的引用ID
name:
必填属性,指定该标签调用哪个Action
namespace:
可选,指定该标签调用的Action所在的namespace.
executeResult:
可选,指定是否要将Action的处理结果页面包含到本页面。
默认是false,即不包含
ignoreContextParams:
可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。
下面是本示例应用中的Action类,包含连个处理逻辑。
代码如下
publicclassTagActionextedndsActionSupport
{
//封装用户请求参数的author属性
privateStringauthor;
//author的get和set的方法,省略……
publicStringexecute()throwsException
{
return "done";
}
publicStringlogin()throwsException
{
ServletActionContext.getRequest().setAttribute("author",getAuthor());
return"done";
}
}
上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。
代码如下
--定义第一个Action,使用lee.TagAction的execute方法作为处理逻辑-->
succ.jsp
--定义第二个Action,使用lee.TagAction的login方法作为处理逻辑-->
loginSucc.jsp
..............
上面配置文件将一个Action类定义成两个逻辑Action,可以在JSP页面中通过action.../>标签来调用这两个逻辑Action,部分jsp代码如下:
下面调用第一个Action,并将结果包含到本页面中。
action name="tage1" executeResult=“true” />
下面调用第二个Action,并将结果包含到本页面中。
阻止本页面请求参数传入Action
action name=“tag2” executeResult="true" ignoreContextParams="true" />
下面调用第二个Action,且不将结果包含到本页面中。
action name="tag2" executeResult="false" />
property value="#attr.author"/>
上面页面中,通过指定executeResult属性来控制是否将处理结果包含到本页面中;还可以通过ignoreContextParams属性来决定是否将本页面的请求参数出入Action。
3.actionerror
这个标签负责输出错误信息到客户端,例子如下:
Action代码如下:
packagelee;
importcom.opensymphony.xwork2.ActionSupport;
publicclassDemoActionextendsActionSupport
{
@Override
publicStringexecute()
{
addActionError("第一条错误消息!
");
addActionError("第二条错误消息!
");
returnSUCCESS;
}
}
JSP页面代码如下:
<%@pagecontentType="text/html;charset=GBK"language="java"%>
<%@taglib prefix="s"uri="/struts-tags"%>
actionerror/>
4.actionmessage
这个标签负责输出提示信息到客户端,例子如下:
Action代码如下:
packagelee;
importcom.opensymphony.xwork2.ActionSupport;
publicclassDemoActionextendsActionSupport
{
@Override
publicStringexecute()
{
addActionMessage("第一条普通消息!
");
addActionMessage("第二条普通消息!
");
returnSUCCESS;
}}
JSP页面代码如下:
<%@pagecontentType="text/html;charset=GBK"language="java"%>
<%@taglib prefix="s"uri="/struts-tags"%>
actionmessage/>
5.append
来做iterator标签的辅助,将不同iterator中的内容合在一个iterator中。
参数
名字
是否必须
默认值
可否使用表达式
类型
描述
id
否
是
String
用来保存结果iterator的对象在valuecontext中的名字。
例子
Action类
publicclassAppendIteratorTagActionextendsActionSupport{
privateListmyList1;
privateListmyList2;
privateListmyList3;
publicStringexecute()throwsException{
myList1=newArrayList();
myList1.add("1");
myList1.add("2");
myList1.add("3");
myList2=newArrayList();
myList2.add("a");
myList2.add("b");
myList2.add("c");
myList3=newArrayList();
myList3.add("A");
myList3.add("B");
myList3.add("C");
return"done";
}
publicListgetMyList1(){returnmyList1;}
publicListgetMyList2(){returnmyList2;}
publicListgetMyList3(){returnmyList3;}
标签使用
appendid="myAppendIterator">
paramvalue="%{myList1}"/>
paramvalue="%{myList2}"/>
paramvalue="%{myList3}"/>
append>
iteratorvalue="%{#myAppendIterator}">
property/>
iterator>
6.bean
bean标签 用于创建一个JavaBean的实例。
创建JavaBean实例时,可以在标签体内使用标签为该JavaBean实例传入属性,要使用这个标签,需要为该JavaBean类提供对应的setter方法。
如该JavaBean类提供了对应的getter方法,我们就可以访问对应的属性。
bean标签 的属性:
name:
必填,指定要实例化的JavaBean的实现类
id:
可选。
如指定了该属性,则该Javabean实例会被放入StackContext中(不是ValueStack),从而允许直接通过该id属性来访问该JavaBean实例。
【!
!
注意:
在bean标签内时,bean标签创建的JavaBean实例放在valuestack的栈顶,该标签结束,生成的子集被移出valuestack栈。
除非指定了id属性】
下面是个简单的JavaBean
public class Person
{ privateStringname;
private intage;
//getter和setter方法省略 ……}
在jsp页面中的代码:
--使用bean标签创建一个lee.Person类的实例-->
bean name="lee.Person">
--使用Param标签为lee。
Person类的实例传入参数-->
param name="name" value="'yeeku'"/>
param name="age" value="29"/>
property value="name"/>
property value="age"/>
bean>
带id属性的用法:
bean name="lee.Person" id=“p”>
--使用Param标签为lee。
Person类的实例传入参数-->
param name="name" value="'yeeku'"/>
param name="age" value="29"/>
bean>
property value="#p.name"/>
property value="#p.age"/>
7.checkbox
checkbox标签输出一个HTML复选框,等价于HTML代码:
。
代码
1.checkbox label="性别" name="user.sex" value="true" fieldValue="dddd"/>
这里value的值是“假”值,fieldValue的值才是真值。
当value="true"表示这个复选框被选上。
为false时不选上
另外,它在向html转换后会多出一个隐藏域,很奇怪。
上面的代码输出成html是这样的:
代码
1.
2.
8.checkboxlist
复选框
名称
必需
默认
类型
描述
fieldValue
是
true
String
指定在复选框选中时,实际提交的值
复选框组,对应Action中的集合
名称
必需
默认
类型
描述
list
是
无
CellectionMapEnumerationIteratorarray
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容
listKey
否
无
String
指定集合对象中的哪个属性作为选项的value
listValue
否
无
String
指定集合对象中的哪个属性作为选项的内容
例子:
checkboxlistTag.jsp
<%@pagecontentType="text/html;charset=GBK"%>
<%@taglibprefix="s"uri="/struts-tags"%>
form>
checkboxlistname="interest"list="{'足球','篮球','排球','游泳'}"label="兴趣爱好"/>
form>
9.combobox
combobox标签生成一个单行文本框和下拉列表框的结合,但两个表单元素只对应一个请求参数,只有单行文本框里的值才包含请求参数,而下拉列表框则只是用于辅助输入,并没有name属性,也就不会产生请求参数。
使用该标签时,需要指定一个list属性,该list属性指定的集合将用于生成列表框。
例子如下:
<%@pagecontentType="text/html;charset=GBK"language="java"%>
<%@taglib prefix="s"uri="/struts-tags"%>
使用s:
combobox生成下拉输入框
head/>
使用s:
combobox生成下拉输入框
form>
comboboxlabel="请选择您喜欢的图书"theme="css_xhtml"labelposition="top"
list="{'Spring2.0','J2EE','Ajax'}"
size="20"maxlength="20"name="book"/>
form>
通过访问上面的JSP页面,我们可以看到上面的文本框,用户可以自行输入,可也以选择下面的checkbox中的内容来进行输入。
需要注意的是,此时的下拉列表仅仅是用于辅助输入的,并没有任何实际意义,因此不能指定它的listKey和listValue属性。
10.conponent
conponent标签用于使用自定义标签,因为使用自定义组件还是基于主题,模板管理的,因此在使用component标签,常常需要指定如下3个属性:
theme:
自定义组件所使用的主题,默认使用xhtml主题。
templateDir:
指定自定义组件的主题目录,默认使用系统的主题目录,即template目录。
template:
指定自定义组件所使用的模板。
此外,还可以component标签中使用param标签来注入参数的值。
例子如下:
<%@pagecontentType="text/html;charset=GBK"language="java"%>
<%@taglib prefix="s"uri="/struts-tags"%>
使用s:
component标签
使用s:
component标签
使用自定义主题,自定义主题目录
从Web应用根路径下加载模板,使用ftl模板。
component
theme="customTheme"
templateDir="customTemplateDir"
template="ftlCustomTemplate">
paramname="list"value="{'Spring2.0','J2EE','Ajax'}"/>
component>
使用自定义主题,自定义主题目录
从Web应用根路径下加载模板,使用JSP模板。
component
theme="customTheme"
templateDir="customTemplateDir"
template="jspCustomTemplate.jsp">
paramname="list"value="{'Spring2.0','J2EE','Ajax'}"/>
component>
使用默认主题(xhtml),默认主题目录(template)
从Web应用中加载模板,使用JSP模板。
componenttemplate="mytemplate.jsp">
paramname="list"value="{'Spring2.0','J2EE','Ajax'}"/>
component>
使用自定义主题,自定义主题目录
从/WEB-INF/classes路径下加载模板,使用ftl模板。
component
theme="myTheme"
templateDir="myTemplateDir"
template="myAnotherTemplate">
paramname="list"value="{'Spring2.0','J2EE','Ajax'}"/>
component>
上面使用了FreeMarker和JSP模板,FreeMarker模板的ftlCustomTemplate.ftl代码如下:
#bbbbbb;">
FreeMarker自定义模板
请选择您喜欢的图书
<@s.selectlist="parameters.list"/>