將您將要展現(xiàn)的列表的數(shù)據(jù)集合(Collection),放入request/pagecontext/session內(nèi)(使用setAttribute方法.這個(gè)工作可以在action/servlet里完成,也可以在jsp頁面內(nèi)完成),然后頁面跳轉(zhuǎn)到使用ECSide標(biāo)簽的jsp頁面,此時(shí)ECSide就可以幫助您展現(xiàn)出所需要的列表.
一個(gè)簡單的流程通常是這樣的.
1 客戶端請求action/servlet(如 http://10.195.129.101/test/userlist.do)
2 action接受到請求后,調(diào)用相應(yīng)的BO/dao,執(zhí)行取列表數(shù)據(jù)的方法.
3 取得數(shù)據(jù)后(通常是一個(gè)vo/map的list),將數(shù)據(jù)放入request內(nèi)(使用requset.setAttribute(key,value)方法.)
4 將請求forward到使用ECSide標(biāo)簽的jsp頁面.
5 ECSide將展現(xiàn)出列表.
知道了原理,那么讓我們一起來完成一個(gè)快速而簡單的例子吧.現(xiàn)在有一張用戶信息表,如下
表名稱: USER_INFO(用戶信息表)
字段:
USERID (用戶編號(hào))
USERNAME (用戶名)
PASSWD (密碼)
USERROLE (角色) 0 被鎖定 1 普通 2 高級(jí) 3 管理員 4超級(jí)管理員
REGDATE (注冊日期)
EMAIL (EMAIL)
GENDER (性別) 0 未知 1 男 2女
MEMO (備注)
h2db的建表腳本如下:
create table USER_INFO (
USERID int not null identity,
USERNAME varchar(80) not null,
PASSWD varchar(255) not null,
USERROLE varchar(10) default 1,
REGDATE varchar(20) ,
EMAIL varchar(128) ,
GENDER varchar(2) default 0,
MEMO varchar(1024) ,
constraint PK_USER_INFO primary key (USERID)
);
對應(yīng)VO:
public class UserInfo {
private Integer userId;
private String userName;
private String passwd;
private String userRole;
private String regDate;
private String email;
private String gender;
private String memo;
/* 略去getter setter方法 */
}
對應(yīng)DAO如下(假設(shè)DAO里只有一個(gè)方法,取得全部的用戶信息,返回的是VO的List):
public class UserDAO extends BaseDAO {
public List getAllUsers(){
StringBuffer bufSql = new StringBuffer("SELECT * FROM USER_INFO WHERE 1=1");
Connection conn=null;
PreparedStatement pstmt = null;
ResultSet rest = null;
List allUsers=null;
try {
conn = getConnection();
pstmt = ConnectionUtils.prepareStatement(conn,bufSql.toString());
rest = pstmt.executeQuery();
allUsers=new ArrayList();
UserVO userVO=null;
while (rest.next()) {
userVO=new UserVO();
/* 略去將ResultSet結(jié)果放入VO的過程 */
allUsers.add(userVO);
}
} catch (Exception e) {
allUsers=null;
}finally{
close(rest, pstmt, conn);
}
return allUsers;
}
}
該簡單例子假設(shè)該表數(shù)據(jù)量不大:500以內(nèi),采用ECSide的java內(nèi)存分頁技術(shù)
由于此例子實(shí)在簡單,所以略去BO層.
action(DispatchActionSupport)代碼如下:
public class MyTestAction extends DispatchAction {
// java內(nèi)存分頁
public ActionForward getAllUsers(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 取得DAO,這里是從spring上下文中取得指定DAO,略去spring相關(guān)代碼
UserDAO userDAO=(UserDAO)getBean("userDAO");
List allUsers = userDAO.getAllUsers();
//將結(jié)果集合放入request內(nèi),記住鍵名"allUsers".
request.setAttribute("allUsers", allUsers);
//forward到列表展現(xiàn)頁面
return mapping.findForward("userlistPage");
}
}
訪問該action的URL為
http://localhost:8080/ecsdemo/simpledemo.do?actionMethod=getAllUsers
jsp頁面:
引入標(biāo)簽聲明
<%@ taglib uri="http://www.ecside.org" prefix="ec" %>
通常jsp頁面內(nèi)取得應(yīng)用上下文是必須的.
<%
String webapp=request.getContextPath();
%>
引入ECSide必要的css js
<link rel="stylesheet" type="text/css" href="<%=webapp%>/common/css/ECSide_style.css" />
<script type="text/javascript" src="<%=webapp%>/common/js/prototype_mini.js" ></script>
<script type="text/javascript" src="<%=webapp%>/common/js/ECSide.js" ></script>
ECSide的標(biāo)簽,也是展現(xiàn)列表最關(guān)鍵的環(huán)節(jié):
<ec:table items="allUsers" var="user"
retrieveRowsCallback="process"
action="${pageContext.request.contextPath}/simpledemo.do?actionMethod=getAllUsers"
title="用戶列表"
width="100%"
classic="true"
>
<ec:row>
<ec:column width="50" property="_0" title="序號(hào)" value="${GLOBALROWCOUNT}" />
<ec:column width="80" property="userRole" title="角色" />
<ec:column property="userName" title="用戶名" />
<ec:column width="100" property="passwd" title="密碼" />
<ec:column width="120" property="email" title="電子信箱" />
<ec:column width="70" property="gender" title="性別" />
</ec:row>
</ec:table>
<ec:table> ECSide的主標(biāo)簽,可以理解為 html里的table標(biāo)簽,items指明列表集合在request的屬性表里的鍵名, var指明迭代列表集合時(shí),單條記錄所用的變量名.此處類似jstl里的c:forEach標(biāo)簽.
retrieveRowsCallback="process" 指明采用ECSide的java內(nèi)存分頁技術(shù).action指明翻頁排序等操作時(shí),所要調(diào)用的action的url,在這里你可以繼續(xù)使用展現(xiàn)列表所使用的action
title="用戶列表" 列表的標(biāo)題
width="100%" 列表的寬度
classic="true" 使用傳統(tǒng)方式列表
<ec:row> 行標(biāo)簽,可以理解為類似html里的tr標(biāo)簽
<ec:column> 列標(biāo)簽,可以理解為類似html里的td標(biāo)簽
width列的寬度, 類似td的 width屬性
property 該列所要顯示的數(shù)據(jù)在VO中對應(yīng)的屬性字段的名字(如果每條數(shù)據(jù)是存放在VO里的話),或MAP里對應(yīng)的key的名字(如果每條數(shù)據(jù)是存放在MAP里的話)
title 表頭中該列所要顯示的名稱
value 該列所要顯示的內(nèi)容.當(dāng)你要顯示的內(nèi)容默認(rèn)不是VO/MAP里的值的時(shí)候,你才需要使用value屬性,為該列手動(dòng)的指定一個(gè)值.
${GLOBALROWCOUNT}為ECSide內(nèi)置的一個(gè)特殊變量,表示的數(shù)據(jù)所在的行號(hào),針對全部數(shù)據(jù)而言,${ROWCOUNT}是針對當(dāng)前頁面而言.
聯(lián)系客服