Struts2的标签库(二)之数据标签

数据标签主要用于提供各种数据访问相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能。

1. action标签

该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可以将Action处理结果包含到本页面中来。该标签有如下几个属性:

(1).        var: 这是一个可选属性,一旦定义了该属性,该Action将被放入Stack Context中。

(2).        name:这是一个必填属性,通过属性指定该标签调用哪个Action。

(3).        namespace:这是一个可选属性,该属性指定义该调用的Action所在的namespace。

(4).        executeResult:这是一个可选属性,指定是否将Action结果页面包括到本页面。默认值是false.

(5).        ignoreContextParam:这是一个可选属性,指定该页面中的请求参数是否需要传入调用的Action。默认值是false,即本页面的请求参数传入被调用的Action.

下面笔者通过个例子来说明,首先创建个TagAction.java

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.xml中加入action.

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<constant name="struts.i18n.encoding" value="GBK"/>

	<package name="owen" extends="struts-default">
		<!-- 定义第一个Action,使用TagAction的
			execute方法作为控制处理逻辑 -->
		<action name="tag1" class="com.owen. app.action.TagAction">
			<result name="done">/WEB-INF/content/succ.jsp</result>
		</action>
		<!-- 定义第二个Action,使用TagAction的
			login方法作为控制处理逻辑 -->
		<action name="tag2" class="com.owen.app.action.TagAction"
			method="login">
			<result name="done">/WEB-INF/content/loginSucc.jsp</result>
		</action>
		<action name="*">
			<result>/WEB-INF/content/{1}.jsp</result>
		</action>
	</package>
</struts>

最后,在JSP视图上设置,访问时,直接访问s-action.jsp.它自己就会去调用struts.xml中的action.同时,自己可在访问地址栏后填写?author=owen.第一处有owen,后两处没有owen.

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:action标签在页面中调用Action</title>
</head>
<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>
</html>

2. bean标签

该标签用于创建一个JavaBean.如果指定了var属性,则可以将创建的JavaBean实例放入StackContext中。bean标签可以指定下面属性:

(1).        name:该属性是一个必填属性,指定要实现的JavaBean的实现类。

(2).        var:该属性是一个可选属性,如果指定了。则JavaBean实例会被放入Stack Context中,并放入requestScope中。下面是一个简单的JavaBean。

首先,先定义一个Person.java的类

public class Person
{
	private String name;
	private int age;

	// name的setter和getter方法
	public void setName(String name)
	{
		this.name = name;
	}
	public String getName()
	{
		return this.name;
	}

	// age的setter和getter方法
	public void setAge(int age)
	{
		this.age = age;
	}
	public int getAge()
	{
		return this.age;
	}
}

其次,在jsp视图中应用

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:bean标签创建JavaBean的实例</title>
</head>
<body>
<!-- 使用bean标签创建一个Person类的实例 -->
<s:bean name="com.owen.app.dto.Person" var=”p”>
	<!-- 使用param标签为Person类的实例传入参数 -->
	<s:param name="name" value="willieam"/>
	<s:param name="age" value="29"/>
	<!-- 因为在bean标签内,Person实例位于ValueStack的栈顶,
		故可以直接访问lee.Person实例 -->
	Person实例的name为:<s:property value="#p.name"/><br/>
	Person实例的age为:<s:property value="#p.age"/>
</s:bean>
</body>
</html>

3. date标签

date标签主要用于格式化一个日期,可以指定发下的属性:

(1).        format:这是一个可选属性,如果指定了该属性,将根据属性指定的格式来格式日期。

(2).        nice:这是一个可选属性,该属性只能为true或者false,用于指定是否指定输出指定日期和当前时刻之间的时间差。该属性默认是false,即只能表示不输出时间差。

(3).        name:这是一个必填属性,该属性指定要格式化日期值

(4).        var:这是一个可选属性,如果指定了该属性,格式化后的字符串将被放入Stack Context中,并放入requestScope中,但不会在页面上输出。

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:date标签格式化日期</title>
</head>
<body>
<s:bean var="now" name="java.util.Date"/>
nice="false",且指定format="dd/MM/yyyy"<br/>
<s:date name="#now" format="dd/MM/yyyy" nice="false"/><hr/>
nice="true",且指定format="dd/MM/yyyy"<br/>
<s:date name="#now" format="dd/MM/yyyy" nice="true"/><hr/>
指定nice="true"<br/>
<s:date name="#now" nice="true" /><hr/>
nice="false",且没有指定format属性<br/>
<s:date name="#now" nice="false"/><hr/>
nice="false",没有指定format属性,指定了var<br/>
<s:date name="#now" nice="false" var="abc"/><hr/>
${requestScope.abc} <s:property value="#abc"/>
</body>
</html>

4. include标签

    include标签用于一个JSP页面,或者一个Servlet包含到本页面中。

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:include标签来包含目标页面</title>
</head>
<body>
<h2>使用s:include标签来包含目标页面</h2>
<!-- 使用include标签来包含其他页面 -->
<s:include value="included-file.jsp"/>
<!-- 使用include标签来包含其他页面,并且传入参数 -->
<s:include value="included-file.jsp">
	<s:param name="author" value="'yeeku'"/>
</s:include>
</body>
</html>

5. push标签

push标签用于将某个值放到ValueStack的栈顶,从而可以更简单地访问该值。

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:push来将某个值放入ValueStack的栈顶</title>
</head>
<body>
<h2>使用s:push来将某个值放入ValueStack的栈顶</h2>
<!-- 使用bean标签创建一个JavaBean实例,
	指定var属性,并将其放入Stack Context中 -->
<s:bean name="com.owen.app.dto.Person" var="p">
	<s:param name="name" value="owen"/>
	<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>
</body>
</html>

6. set标签

使用set标签可以理解为定义一个新变量,且将一个已有的值复制给新变量,并且可以将新变量指定的范围。set标签有如下属性。

(1).        scope:这是一个可选属性,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。该属性默认值是action.

(2).        value:这是一个可选属性,指定将赋给变量的值。如果没有指定该属性,则将ValueStack栈顶的值赋值给新变量。

(3).        var:这是一个可选属性,如果指定了该属性,则会将值放入ValueStack中。

 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:set设置一个新变量</title>
</head>
<body>
<h2>使用s:set设置一个新变量</h2>
<!-- 使用bean标签定义一个JavaBean实例 -->
<s:bean name="com.owen.app.dto.Person" id="p">
	<s:param name="name" value="owen"/>
	<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="yyy" scope="application"/>
application范围的yyy对象的name属性:${applicationScope.yyy.name}<br/>
application范围的yyy对象的age属性:${applicationScope.yyy.age}<hr/>
将Stack Context中的p值放入session范围内。<br/>
<s:set value="#p" name="zzz" scope="session"/>
session范围的zzz对象的name属性:${sessionScope.zzz.name}<br/>
session范围的zzz对象的age属性:${sessionScope.zzz.age}
</body

7. url标签

url标签用于生成一个URL地址,可以通过url标签指定param子元素,从而指定URL发送参数。有发下几个属性:

(1).        action:这是一个可选属性,指定生成URL的地址为哪个Action。如果Action不提供,就使用value作为URL的地址值。

(2).        anchor:这是一个可选属性,指定URL的锚点。

(3).        encode:这是一个可选属性,指定是否需要对参数进行编码,默认是true。

(4).        escapeAmp:这是一个可选属性,指定是否需要对&符号进行编码,默认是true.

(5).        forceAddSchemeHostAndPort:这是一个可选参数,指定是否需要在URL对应的地址里强制添加scheme、主机号和端口。

(6).        incldeContext:这是一个可选属性,指定是否需要将当前上下文包含在URL地址中。

(7).        incldeParams:这是一个可选属性,该属性指定是否包含请求参数,该属性的属性值只能为none、get或all。该属性的默认值是get.

(8).        method:这是一个可选属性,该属性指定Action的方法。当使用Action来生成URL时,如果指定了该属性,则URL链拉到指定Action特定方法。

(9).        namespace:这是个可选属性,该属性指定命名空间。当使用Action来生成URL时,如果指定了该属性,则是URL将链接到此namespace的指定Action处。

(10).    portalMethod:这是一个可选属性,指定结果页面的portlet模式。

(11).    scheme:这是一个可选属性,用于设置scheme属性。

(12).    value:这是一个可选属性,指定生成URL的地址值,如果value不提供就用action属性指定的Action作为URL地址。

(13).    var:这是一个可选属性,如果指定了该属性,将会把该链接放入Struts2的valueStack中。

(14).    windowState:这是一个可选属性,指定结果页面的portlet的窗口状态。

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用s:url来生成一个URL地址</title>
</head>
<body>
<h2>s:url来生成一个URL地址</h2>
只指定value属性的形式。<br/>
<s:url value="editGadget.action"/>
<hr/>
指定action属性,且使用param传入参数的形式。<br/>
<s:url action="showBook">
	<s:param name="author" value="'yeeku'" />
</s:url>
<hr/>
既不指定action属性,也不指定value属性,但使用param传入参数的形式。<br/>
<s:url includeParams="get"  >
	<s:param name="id" value="%{'22'}"/>
</s:url>
<hr/>
同时指定action属性和value属性,且使用param传入参数的形式。<br/>
<s:url action="showBook" value="xxxx">
	<s:param name="author" value="'yeeku'" />
</s:url>
</body>
</html>

8. 其它标签

当然还有debug和param标签,debug的标签主要是用于测试的,生成一个超级链接,可以看到ValueStack和Stack Contextr中所有的值信息。param标签主要用于其它标签提供参数。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值