Struts 2数据标签
1)action标签
action标签有如下属性:
action:
package lee; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; public class TagAction extends ActionSupport { //封装用户请求参数的author属性 private String author; //author属性的setter和getter方法 public void setAuthor(String author) { this.author = author; } public String getAuthor() { return this.author; } //定义第一个处理逻辑 public String execute() throws Exception { return "done"; } //定义第二个处理逻辑 public String login() throws Exception { ActionContext.getContext(). put("author", getAuthor()); return "done"; } }
struts配置:
<package name="lee" extends="struts-default"> <!-- 定义第一个Action,使用lee.TagAction的 execute方法作为控制处理逻辑 --> <action name="tag1" class="lee.TagAction"> <result name="done">succ.jsp</result> </action> <!-- 定义第二个Action,使用lee.TagAction的 login方法作为控制处理逻辑 --> <action name="tag2" class="lee.TagAction" method="login"> <result name="done">loginSucc.jsp</result> </action> <action name=""> <result>.</result> </action> </package>
jsp应用:
<body> 下面调用第一个Action,并将结果包含到本页面中。<br> <s:action name="tag1" executeResult="true"/> <hr/> 下面调用第二个Action,并将结果包含到本页面中。<br> 但阻止本页面请求参数传入Action。<br> <s:action name="tag2" executeResult="true" ignoreContextParams="true"/> <hr/> 下面调用第二个Action,且并不将结果包含到本页面中。<br> <s:action name="tag2" executeResult="false"/> 本页面是否可访问?<s:property value="author"/> </body>
2)bean标签
bean标签用于创建一个javabean实例。可以在该标签体内使用<param .../>标签为该javabean实例传入属性,如果我们需要使用<param .../>标签为该javabean实例传入属性值,则应该为该javabean类提供对应的setter方法;若我们还希望能访问该javabean的某个属性,则应该为该属性提供一个对应的getter方法。
bean标签的属性:
如:
javabean实例在ValueStack的栈顶时:
<body> <!-- 使用bean标签创建一个lee.Person类的实例 --> <s:bean name="lee.Person"> <!-- 使用param标签为lee.Person类的实例传入参数 --> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> <!-- 因为在bean标签内,lee.Person实例位于ValueStack的栈顶, 故可以直接访问lee.Person实例 --> Person实例的name为:<s:property value="name"/><br> Person实例的age为:<s:property value="age"/> </s:bean> </body>
javabean实例在Stack Context中时:
<body> <!-- 使用bean标签创建一个lee.Person类的实例,为其指定了var属性 --> <s:bean name="lee.Person" var="p"> <!-- 使用param标签为lee.Person类的实例传入参数 --> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> <!-- 根据JavaBean实例指定的var属性来访问JavaBean实例 --> Person实例的name为:<s:property value="#p.name"/><br> Person实例的age为:<s:property value="#p.age"/> </body>
该例中action只有简单的setter和getter方法,故不做详述。
3)date标签
<% //生成一个Date实例 java.util.Date now = new java.util.Date(107, 12, 23, 13, 23, 24); //将该Date实例设置成一个pageContext里的属性 pageContext.setAttribute("now" , now); %> nice="false",且指定format="dd/MM/yyyy"<br> <s:date name="#attr.now" format="dd/MM/yyyy" nice="false"/><hr> nice="true",且指定format="dd/MM/yyyy"<br> <s:date name="#attr.now" format="dd/MM/yyyy" nice="true"/><hr> 指定nice="true"<br> <s:date name="#attr.now" nice="true" /><hr> nice="false",且没有指定format属性<br> <s:date name="#attr.now" nice="false"/><hr>
4)debug标签
5)include标签
如:
<s:include value="included-file.jsp"/> <!-- 使用include标签来包含其他页面,并且传入参数 --> <s:include value="included-file.jsp"> <s:param name="author" value="'yeeku'"/> </s:include>
被包含的页面:可以用param来获取传递过来的值
<body> <h3>被包含的页面</h3> author参数值为:${param.author} </body>
6)param标签
7)push标签
<!-- 使用bean标签创建一个JavaBean实例,指定var属性,并将其放入Stack Context中 --> <s:bean name="lee.Person" var="p"> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> <!-- 将Stack Context中的p对象放入ValueStack栈顶--> <s:push value="#p"> <!-- 输出ValueStack栈顶对象的name和age属性 --> ValueStack栈顶对象的name属性:<s:property value="name"/><br> ValueStack栈顶对象的age属性:<s:property value="age"/><br> </s:push>
8)set标签
set标签用于将某个值放入指定范围内,例如:application范围、session范围等
如果指定action范围,则将该值放入request范围中,并被放入Struts2的Stack Context中。
<body> <h2>使用s:set设置一个新变量</h2> <!-- 使用bean标签定义一个JavaBean实例 --> <s:bean name="lee.Person" id="p"> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> 将Stack Context中的p值放入默认范围(action)内。<br /> <s:set value="#p" name="xxx"/> Stack Context内xxx对象的name属性:<s:property value="#xxx.name"/><br /> Stack Context内xxx对象的age属性:<s:property value="#xxx.age"/><br /> request范围的xxx对象的name属性:${requestScope.xxx.name}<br /> request范围的xxx对象的age属性:${requestScope.xxx.age}<hr /> 将Stack Context中的p值放入application范围内。<br /> <s:set value="#p" name="xxx" scope="application"/> application范围的xxx对象的name属性:${applicationScope.xxx.name}<br /> application范围的xxx对象的age属性:${applicationScope.xxx.age}<hr /> 将Stack Context中的p值放入session范围内。<br/> <s:set value="#p" name="xxx" scope="session"/> session范围的xxx对象的name属性:${sessionScope.xxx.name}<br /> session范围的xxx对象的age属性:${sessionScope.xxx.age} </body>
注:application范围是指在Web应用程序运行期间,所有的页面都可以访问在这个范围内的对象。
9)url标签
url标签用于生成一个URL地址,可以通过为url标签指定param子元素,从而向指向URL发送请求参数。
10)property标签