您的位置:首页 > 编程语言 > Java开发

Struts 2 数据标签教程

2010-01-14 13:46 393 查看
Struts 2 数据标签例题

在这个例子中我们将学习怎样使用property标签,set标签,push标签。这些标签是Struts 2的数据标签。之前我们已经了解到什么是动作上下文(ActionContent)和值栈(ValueStack)。



动作上下文(ActionContext)是一个全局存储区域。它保存着处理请求关联的所有数据。

动作上下文(ActionContext)是单线程的。这确保了Struts 2的动作(action)的线程安全。

值栈(ValueStack)是动作上下文(ActionContext)的一部分。Struts 2的动作(action)驻留在值栈(ValueStack)中。

Property标签

property标签被用来从值栈(ValueStack)或在动作上下文(ActionContext)中的其他对象,如application或seesion中取得对象。下面我们来看看如何使用property标签。



下面是AlbumInfoAction类:

package vaannila;

public class AlbumInfoAction{

private String title;
private Artist artist;

public String populate()
{
title = "Thriller";
artist = new Artist("Michael Jackson","King of pop");
return "populate";
}

public String execute()
{
return "success";
}

public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Artist getArtist() {
return artist;
}
public void setArtist(Artist artist) {
this.artist = artist;
}

}


下面是Artist类:

package vaannila;

public class Artist {

private String name;
private String bio;

Artist(String name, String bio)
{
this.name = name;
this.bio = bio;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}

}


让我们来看看怎么在jsp页面通过property标签访问动作(action)类属性。以下是albumDetails.jsp页面的代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<s:head />
<mce:style type="text/css"><!--
@import url(style.css);
--></mce:style><style type="text/css" mce_bogus="1">@import url(style.css);</style>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Album Details</title>
</head>
<body>
<div class="content">
<b>Album Title :</b> <s:property value="title" /> <br>
<s:push value="artist">
<b>Artist Name :</b> <s:property value="name" /> <br>
<b>Artist Bio :</b> <s:property value="bio" /> <br>
</s:push>
</div>
</body>
</html>


我们可以看到title是AlbumInfoAction的属性,所以可以直接访问它。但是name和bio是Artist类的属性,所以我们需要更深一步的访问,我们需要使用第二级OGNL表达式去访问它们。

Set标签

set标签被用来为属性值设置另外一个名称,可以帮助更快更方便的访问属性。当我们使用property标签访问artist的名字,需要更深一层的访问。取而代之,我们可以在动作上下文(ActionContext)中设置另外一个属性,并直接访问它。举例如下:

<s:set name="artistName" value="artist.name" />
<s:set name="artistBio" value="artist.bio" />
<b>Album Title :</b> <s:property value="title" /> <br>
<b>Artist Name :</b> <s:property value="#artistName" /> <br>
<b>Artist Bio :</b> <s:property value="#artistBio" /> <br>


artistName和artisBio属性将被保存在动作上下文(ActionContext)中。引用它们的时候要用#objectName语法。

也可以将属性值保存到session中。

<s:set name="artistName" value="artist.name" scope="session" />
<s:set name="artistBio" value="artist.bio" scope="session" />
<b>Album Title :</b> <s:property value="title" /> <br>
<b>Artist Name :</b> <s:property value="#session['artistName']" /> <br>
<b>Artist Bio :</b> <s:property value="#session['artistBio']" /> <br>


用同样的方法,也可以将属性值保存到动作上下文(ActionContext)中的其他对象里去。

Push标签

我们可以使用push标签向值栈(ValueStack)中保存值。这个值会在值栈(ValueStack)的最上端,所以可以代替深层引用使用一级OGNL表达式进行引用。代码如下:

<b>Album Title :</b> <s:property value="title" /> <br>
<s:push value="artist">
<b>Artist Name :</b> <s:property value="name" /> <br>
<b>Artist Bio :</b> <s:property value="bio" /> <br>
</s:push>


源代码:下载

源代码 + lib:下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: