Struts 2的标签库(3)——数据标签

Struts 2数据标签

1)action标签

action标签有如下属性:

  • var:将该action放入ValueStack中;可用id代替
  • name:必填。指出调用哪个action
  • namespace:指出该标签调用的action所在的namespace
  • executeResult:该属性指定的是要将Action的处理结果页面包含到本页面。该默认属性为false时,即不包含。
  • ignoreContextParams:指定该页面的请求参数是否需要传入到调用的action中。该默认属性为false时,即将本页面的请求参数传入被调用的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标签的属性:

  • name:必填。指定要实例化的javabean的实现类
  • var:将该action放入StackContext中而并非ValueStack中;从而允许直接通过该var属性来访问该javabean实例。

 如:

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标签

Struts 2的标签库(3)——数据标签_第1张图片.

 

<%
//生成一个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标签

 Struts 2的标签库(3)——数据标签_第2张图片

如:

<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标签

Struts 2的标签库(3)——数据标签_第3张图片

Struts 2的标签库(3)——数据标签_第4张图片

7)push标签

Struts 2的标签库(3)——数据标签_第5张图片

 

<!-- 使用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范围等

Struts 2的标签库(3)——数据标签_第6张图片

如果指定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标签

 Struts 2的标签库(3)——数据标签_第7张图片

你可能感兴趣的:(Struts 2的标签库(3)——数据标签)