struts2标签的使用

一 数据标签

1. property标签

property标签用来显示属性的值
所包含的属性:

属性 是否必须 默认值 类型 描述
value ValueStack最顶端的值 Object 被显示的值
default null String value值为空时显示的值
escape ture Boolean 是否转义HTML

 

 

 

 

 

 

使用示例:
<s:property value="user.username" />
如果不指明value,即:<s:property /> 则值默认值为VlueStack栈顶的值。

这里如果加上default属性:

<s:property value="user.username" default="用户名" />

则当user.username的值为空时,将显示"用户名"这三个字。

2. set标签

set标签用于给一个属性取别名

属性 是否必须 类型 描述
name String 被设置在指定作用域的变量的引用名
scope String application、session、request、page或者action,默认值为action
value Object 设置值得表达式,即name引用名的值

 

 

 

 

 

使用示例
<s:set name="username" value="user.username" />
<s:property value="#username" />
这里我们将user.username 的值赋给了新建的引用变量username,之后我们就可以直接使用这个变量来获得user.username的值了

3. push标签

与set标签不同的是,push标签把值放入ValueStack中,以便我们对属性的访问。

属性 是否必须 类型 描述
value Object 放到ValueStack中的值

 

 

 

使用示例:
假设我们有一个User.java类:

public class User{
	private String name;
	private String password;
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public void setPassword(String password){
		this.password = password;
	}
	public String getPassword(){
		return password;
	}
}

Action类:

public class TestAction extends ActionSupport{
	private User user;
	public String execute (){
		return "success";
	}
	public void setUser(User user){
		this.user = user;
	}
	public User getUser(){
		return user;
	}
}

在jsp页面中我们可以这样调用User的属性:

<s:property value="user.name" />
<s:property value="user.password" />

但是当User中的属性很多时,我们会发现每次都得使用user.的方式来调用,我们会觉得很烦,
这里push标签就发挥作用了:

<s:push value="user">
    <s:peoperty value="name" />
    <s:property value="password" />
</s:push>

这样使用的效果与上面的方式是一致的。
这里需要注意的是,user对象是已经存在ValueStack中的了。

4. bean标签

bean标签像是set标签和push标签的混合。主要不同的是bean标签不需要使用一个已经存在的对象。你可以创建一个对象的实例把它放到ValueStack中或者设置为ActionContext的顶级引用。默认情况下,对象会被放在ValueStack中。如果想在标签的作用域之外引用创建的对象,可以使用var属性为对象创建一个引用名,那么这个引用名会作为命名参数存在于ActionContext中,在请求周期内可以使用#操作符访问这个对象。

属性 是否必须 类型 描述
name String 被创建bean的包名和类名
var String 在结束标签作用域之外引用这个bean时使用的变量名

 

 

 

 

使用示例:

假设User.java在com.user包中,内容与上面的一致,
则在jsp页面我们可以这样使用:

<s:bean name="com.user.User" var="user">
	<s:param name="name">张三</s:param>
	<s:param name="password">123456</s:param>
</s:bean>
<s:property value="#user.id"/>
<s:property value="#user.password"/>

这里需要注意的是,user对象是放在ActionContext中的,所以我们需要使用#来访问它。
 

5. action标签

该标签允许我们从当前的视图调用其他的动作。

属性 是否必须 类型 描述
name String 动作名
namespace String 动作的命名空间,默认使用当前页面的命名空间
var String 在后续代码中使用的动作对象的引用名
executeResult Boolean 设为true时将动作的结果显示在当前页面,默认为false
flush Boolean 设为true时在action标签的结尾会刷新写出缓冲区,默认值为true
ignoreContextParams Boolean 设置为true时不包含请求参数,默认为false

使用示例:

index.jsp:

<s:action name="target" namespace="/tagsTest" executeResult="true" />

在struts.xml中有如下配置:

<package name="default" namespace="/tagsTest" extends="struts-default">
	<action name="target" class="com.action.TestAction">
		<result name="success">/success.jsp</result>
	</action>
</package>

上面使用的结果会将success.jsp的页面在index.jsp中显示。

二 控制标签

1. iterator 标签

iterator标签可以遍历Collection、Map、Enumeration、Iterator或者数组。

属性 是否必须 类型 描述
value String 被遍历的对象
status String 如果指定,IteratorStatus对象会使用这个属性指定的名字,且该名字被放在ActionContext中

使用示例:

<s:iterator value="users" status="s">
	<s:property value="#s.count" />
	<s:property value="name" />
	<s:property value="password" />
</s:iterator>

其中users为要遍历的数字或其他的什么集合,集合类型为User,定义与上面定义的User.java一致。
这里status属性定义的s放在ActionContext中,所以访问的时候需要加上#.
额外说明:
如果定义了status属性,那么会在ActionContext中提供一个IteratorStatus对象,这个对象可以提供诸如集合大小、
当前索引等信息。可以通过status属性指定的名字来访问IteratorStatus对象。下面为IteratorStatus对象可以获得的信息:

方法名 返回值
getCount int
getIndex int
isEvent Boolean
isFirst Boolean
isLast Boolean
idOdd Boolean
modulus(int operand) int

上面的示例中我们使用#s.count来获得了当前遍历的是集合中的第几个。

2. if和else标签

属性 是否必须 类型 描述
test Boolean 被求值和测试的布尔表达式

使用示例:

<s:if test="user.age > 35">The user is too old.</s:if>
<s:elseif test="user.age < 18">The user is too young</s:elseif>
<s:else>This user is just right</else>

三 其他标签

1. include标签

include标签与前面讲的action标签不同的是:
include标签可以引用任何的Servlet资源,而action标签只能包含当前Struts 2应用程序中的Struts 2动作。这个包含的动作必须完全在Struts2框架中。include标签可以跳出Struts 2框架引用任何部署Struts 2应用程序的Web应用程序可以访问的资源。

属性 是否必须 类型 描述
value String 页面、动作、Servlet以及其他可以被引用的URL的名字

使用示例:

<s:include value="success.jsp" />

2. URL标签

属性 是否必须 类型 描述
value String 该URL的值
action String 生成URL指向的动作名,是用声明性框架中配置的动作名(不需要.action扩展名)
var String 如果指定,这个URL不会被写出,而会存储在ActionContext留后面使用
includeParams String 从all、get、none中选择参数,默认值为get
includeContent Boolean 如果为true,那么生成的URL会使用应用程序的Context作为前缀,默认值为true
encode Boolean 如果用户浏览器不支持Cookie,会将Session ID追加在生成的URL中
scheme String 指定协议,默认使用当前的协议(HTTP或者HTTPS)

使用示例1:

<s:url value="/helloworld/hello.action" />
<a href='<s:url value="/helloworld/hello.action" />'>Click Me</a>

以上会输出:
/HelloWorld/helloworld/hello.action
Click Me

注:HelloWorld为项目的名称
    Click Me 是超链接,连接到该url指定的路径

使用示例2:

<a:url action="hello" namespace="helloworld" var="myUrl" />
<a:href='<s:property value="#myUrl" />'>Click Me</a>

输出:
Click Me

注:Click Me 为超链接,点击该超链接与上面的结果一致。

 

参考资料:Struts 2 In Action

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章