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

Struts2学习笔记(7)-----Struts2的控制标签iterator,if...else的用法

2011-12-14 22:11 507 查看
       

        今天来看看Struts2的控制标签iterator,if…else…的魅力。之前用过,但总是不是很明白,随着我对Struts2的值栈(ValueStack)与ActionContext的理解渐渐加深后,发现控制标签其实也是很容易滴~~~

        我建了一个JavaBean,代码如下:

package com.iman.model;

public class Song {

private String title;
private String singer;
private String album;
private String publicTime;

public Song(String title, String singer, String album, StringpublicTime) {
super();
this.title = title;
this.singer = singer;
this.album = album;
this.publicTime = publicTime;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getSinger() {
return singer;
}

public void setSinger(String singer) {
this.singer = singer;
}

public String getAlbum() {
return album;
}

public void setAlbum(String album) {
this.album = album;
}

public String getPublicTime() {
return publicTime;
}

public void setPublicTime(String publicTime) {
this.publicTime = publicTime;
}

}


      建一个action文件ControlAction.java,里面有一个类型为list的属性songs,并给这个list添加数值,代码如下:

package com.iman.action;

import java.util.ArrayList;
import java.util.List;

import com.iman.model.Song;
import com.opensymphony.xwork2.ActionSupport;

public class ControlAction extends ActionSupport {
private  List<Song> songs=new ArrayList<Song>();
public StringiteratorSongs()  {
songs=newArrayList<Song>();
// TODOAuto-generated method stub
songs.add(newSong("一天一万年","游鸿明","一天一万年","1998"));
songs.add(newSong("五月的雪","游鸿明","五月的雪","1999"));
songs.add(newSong("下沙","游鸿明","下沙","2000"));
songs.add(newSong("恋上另一个人","游鸿明","恋上游鸿明","2002"));
songs.add(newSong("楼下那个女人","游鸿明","台北寂寞部屋","2003"));
songs.add(newSong("第一个昼夜","游鸿明","2004秋季恋歌","2004"));
songs.add(newSong("白色恋人","游鸿明","诗人的眼泪","2006"));
songs.add(newSong("夫妻脸","游鸿明","倦鸟余花","2007"));
songs.add(newSong("花沙","游鸿明","与爱情无关","2009"));
return SUCCESS;
}

public List<Song>getSongs() {
return songs;
}

public voidsetSongs(List<Song> songs) {
this.songs =songs;
}
}


       现在用<s:iterator  />标签将其输出。Iterator标签主要用于将集合迭代输出,这里的集合可以是List,Set,也可以是Map,它有如下几个属性:

       Value:这个属性用于放置需要输出的集合,是一个可选属性,如果没有,则默认输出值栈(ValueStatck)栈顶的集合;

      Id:用于给集合指定id,是一个可选属性;

      Status:给属性指定迭代时的属性,通过该实例判断当前迭代元素的属性,也是一个可选属性。它有如下所示的属性:

      1.Int getCount:返回当前迭代了几个元素;

      2.Int getIndex:返回当前迭代元素的索引;

      3.Boolean isEven():返回当前迭代元素的索引是否是偶数;

      4.Boolean isFirst():返回当前被迭代的元素是否是第一个元素;

      5.Boolean isLast():返回当前被迭代元素是否是最后一个元素;

      6.Boolean isOdd():返回当前被迭代的元素是否是一个奇数;

      一般情况下status属性与<s:if />…<s:else />标签一起使用。

     先看看怎么用iterator标签将action的list输出,jsp页面如下所示:

<%@ page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s"uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>控制标签</title>
<style type="text/css">
table.demo{border-collapse: collapse;width: 400px;height: 300px;text-align: center;}
table.demo th,td {padding: 0; border: 1px solid #000;}
</style>
</head>
<body>
<table class="demo">
<tr>
<td>歌曲</td>
<td>歌手</td>
<td>专辑</td>
<td>发布时间</td>
</tr>
<s:iterator value="songs"status="songsStatus">
<tr>
<td><s:property value="title"/></td>
<td><s:property value="singer"/></td>
<td><s:property value="album"/></td>
<td><s:property value="publicTime"/></td>
</tr>
</s:iterator>
</table>

</body>
</html>


 

       如上所示,value指的是action中的list属性,而<s:property />的value则指的是JavaBean类Song中的各属性,名字必须一致。

打开服务器并部署项目,在地址栏输入:http://localhost:8000/Struts2Tutorial/iteratorSongs,页面如下所示:



       强大吧?现在来看看将<s:iterator />的status属性与<s:if />…<s:else />标签一起使用的情况。Status创建的实例放在ActionContext中,因此需要用OGNL标签用“#objectName”的方式取值。具体请看jsp页面:

<%@ page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s"uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>控制标签</title>
<style type="text/css">
table.demo{border-collapse: collapse;width: 400px;height: 300px;text-align: center;}
table.demo th,td {padding: 0; border: 1px solid #000;}
.odd{background-color:#13ABC2;}
.even{background-color:#DED95B;}</style>
</head>
<body>
<table class="demo">
<tr>
<td>歌曲</td>
<td>歌手</td>
<td>专辑</td>
<td>发布时间</td>
</tr>
<s:iterator value="songs"status="songsStatus">
<tr class="<s:if test="#songsStatus.odd == true">odd</s:if><s:else>even</s:else>" >
<td><s:property value="title"/></td>
<td><s:property value="singer"/></td>
<td><s:property value="album"/></td>
<td><s:property value="publicTime"/></td>
</tr>
</s:iterator>
</table>

</body>
</html>


      这个jsp页面通过<s:if />…<s:else />标签使偶数行背景是olive色,奇数行是yellow色。

      发布项目在地址栏输入地址:http://localhost:8000/Struts2Tutorial/ifElseStatus,页面所示:

 


      好了,就介绍这么多了,附上struts.xml的文件内容:

      
<action name="iteratorSongs" class="com.iman.action.ControlAction" method="iteratorSongs">
<result name="success">/control/iteratorTag.jsp</result>
</action>
<action name="ifElseStatus" class="com.iman.action.ControlAction" method="iteratorSongs">
<result name="success">/control/ifElseTag.jsp</result>
</action>

 这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7072068,谢谢~ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息