`
lovelease
  • 浏览: 385998 次
社区版块
存档分类
最新评论

jquery写的一个分页grid(非jqGrid插件)

阅读更多
自己写的一个带有删除和修改功能的分页grid,导航栏是动态生成的,可以自己设定每页显示多少条记录,以及导航栏一次最多显示n页,点击【次へ】显示接下来的n页。因为是纯jquery手写的(不是用开源插件),写的不算好,但还是在这里做个备份吧



jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用户列表</title>
    <link rel="stylesheet" type="text/css" href="../css/usermgr/userlist.css">
	<script language="JavaScript" type="text/javascript" src="../js/jquery/jquery-1.8.0.js"></script>
	<script language="JavaScript" type="text/javascript" src="../js/common/common.js"></script>
	<script language="JavaScript" type="text/javascript" src="../js/usermgr/userlist.js"></script>
	
	<style type="text/css"> 

	</style>
	</head>
	<body>
	<% int totalPage = Integer.parseInt((String)request.getAttribute("totalPage"));
	   int curPage = Integer.parseInt((String)request.getAttribute("pageIndex"));
	   int displayNum = Integer.parseInt((String)request.getAttribute("displayNumForPageNavi"));
	   // 以下のstartIndexとendIndexの計算ロジックはuserlist.jsでのstartIndexとendIndexの計算ロジックと同様です
	   int startIndex = curPage % displayNum == 0 ? (curPage - displayNum + 1) : (curPage / displayNum) * displayNum + 1;
	   int endIndex = totalPage >= displayNum ? (displayNum + startIndex <= totalPage ? displayNum + startIndex : totalPage + 1) : totalPage + 1;
	   %>
	<input type="hidden" id="hidden_displayNum" value="<s:property value="displayNumForPageNavi"/>">
	<br><br><br><br><br>
	<center>
		<table>
			<tr>
				<td>
					<div id="pageNaviDiv">
						<table id="pageNavi">
							<tr>
								<td><label>Page:</label></td>
								<td><label id="curPage"><s:property value="pageIndex"/></label></td><td>/</td><td><label id="allPage"><%=totalPage %></label></td>
								<td><a href="javascript:void(0)" id="first">最前</a></td>
								<td><a href="javascript:void(0)" id="prev">前へ</a></td>
								<% for (int i = startIndex; i < endIndex; i ++) { 
									if (i == startIndex) {%>
									<td><a href="javascript:void(0)" class="page" id="firstNavi"><%=i %></a></td>
								<%	} else if (i != startIndex && i == endIndex - 1) {%>
									<td><a href="javascript:void(0)" class="page" id="lastNavi"><%=i %></a></td>
								<%	} else {%>
								<td><a href="javascript:void(0)" class="page"><%=i %></a></td>
								<%	} %>
								<% } %>
								<td><a href="javascript:void(0)" id="next">次へ</a></td>
								<td><a href="javascript:void(0)" id="end">最後</a></td>
								<td><input id="jumpToPage" type="text" style="width:26px;height:16px;"></td>
							</tr>
						</table>
					</div>
				</td>
			</tr>
			<tr>
				<td>
					<div>
						<table id="contentTb">
							<tr id="contentTb_th">
								<th>用户ID</th>
								<th>姓名</th>
								<th>EMAIL地址</th>
								<th>密码</th>
								<th>createTransNo</th>
								<th>updateTransNo</th>
								<th>修正</th>
								<th>删除</th>
							</tr>
							<s:iterator value="userlist" id="list">
							<tr id="contentTb_tr_<s:property value="#list.userId"/>">
								<td><input id="userId<s:property value="#list.userId"/>" type="text" value="<s:property value="#list.userId"/>" style="width:5em;" readonly="readonly;"></td>
								<td><input id="nickname<s:property value="#list.userId"/>" class="input<s:property value="#list.userId"/>" type="text" value="<s:property value="#list.nickname"/>" style="width:8em;" readonly="readonly;"></td>
								<td><input id="email<s:property value="#list.userId"/>" class="input<s:property value="#list.userId"/>" type="text" value="<s:property value="#list.email"/>" style="width:15em;" readonly="readonly;"></td>
								<td><input id="password<s:property value="#list.userId"/>" class="input<s:property value="#list.userId"/>" type="text" value="<s:property value="#list.password"/>" style="width:15em;" readonly="readonly;"></td>
								<td><input id="createTransNo<s:property value="#list.userId"/>" class="input<s:property value="#list.userId"/>" type="text" value="<s:property value="#list.createTransNo"/>" style="width:9em;" readonly="readonly;"></td>
								<td><input id="updateTransNo<s:property value="#list.userId"/>" class="input<s:property value="#list.userId"/>" type="text" value="<s:property value="#list.updateTransNo"/>" style="width:9em;" readonly="readonly;"></td>
								<td>
									<a id="change<s:property value="#list.userId"/>" href="javascript:void(0)" onclick="change(<s:property value="#list.userId"/>)">修正</a>
									<a id="submit<s:property value="#list.userId"/>" href="javascript:void(0)" style="display:none;" onclick="submit(<s:property value="#list.userId"/>)">確認</a>
								</td>
								<td><a id="delete<s:property value="#list.userId"/>" href="javascript:void(0)" onclick="deleteFunction(<s:property value="#list.userId"/>)">削除</a></td>
							</tr>
							</s:iterator>
						</table>
					</div>
				</td>
			</tr>
		</table>
	</center>
	
<br>
<br>
<br>
<br>
<br>
  <center><table id="testRemote"><tr><td/></tr></table></center>
  <center><div id="pager" style="height:4em;"></div></center>
  <button id="aa">test</button>
  </body>
</html>


js:
$(document).ready(function() {
	$("#aa").button();
	// init css control function
	styleFunc();
	
	// clickToPage event
	$(".page").click(clickToPage);
	
	function clickToPage() {
		var pageInfo = "pageIndex=" + $.trim($(this).text());
		var options = {
				url:'clickToPage.html',
				type:'POST',
				dataType:'json',
				data:pageInfo,
				success: clickToPageResponse,
				error: function(){
					alert("サーバーでエラーが発生しました");
				}
			};
		$.ajax(options);
	}
	
	/** clickToPage Response function */
	// $(document).ready(function(){});外部のdeleteFunctionResponseもコールできる為、clickToPageResponseをグローバル関数にする
	window.clickToPageResponse = function(data) {
		/** ======================== refresh page navi START ========================== */
		// id=jumpToPageの<input>のwidthとheightを取得する
		var jumpToPageWidth = $("#jumpToPage").css("width");
		var jumpToPageHeight = $("#jumpToPage").css("height");
		// IEはFF、chromeと違う為、ブラウザーを判断し、widthとheightを処理する
		if($.browser.msie) {
			jumpToPageWidth = parseInt(jumpToPageWidth.substring(0,2)) + 6;
			jumpToPageHeight = parseInt(jumpToPageHeight.substring(0,2)) + 6;
		}else if($.browser.opera) {
			
		}else if($.browser.mozilla) {
			
		}else if($.browser.safari) {
			
		}else {  
			
		}
		
		$("#pageNavi").empty();
		// count of all record
		var allCount = data.allCount;
		// record count of per page
		var countOfPerPage = data.countOfPerPage;
		// ページナビで表示するリンクの数
		var displayNum = data.displayNumForPageNavi;
		// total number of page
		var totalPage = data.totalPage;
		
		var naviHtml = "";
		if (allCount != 0) {
			// current page
			var curPage = data.pageIndex;
			naviHtml += "<tr><td><label>Page:</label></td>"
					 + "<td><label id='curPage'>" + curPage + "</label></td>"
					 + "<td>/</td>"
					 + "<td><label id='allPage'>" + totalPage + "</label></td>"
					 + "<td><a href='javascript:void(0)' id='first'>最前</a></td>"
					 + "<td><a href='javascript:void(0)' id='prev'>前へ</a></td>";
			// 以下のstartIndexとendIndexの計算ロジックはuserlist.jspでのstartIndexとendIndexの計算ロジックと同様です
			// startIndex:1,11,21,...
			var startIndex = curPage % displayNum == 0 ? (curPage - displayNum + 1) : Math.floor(curPage / displayNum) * displayNum + 1;
			var endIndex = totalPage >= displayNum ? (displayNum + startIndex <= totalPage ? displayNum + startIndex : totalPage + 1) : totalPage + 1;
			for (var i = startIndex; i < endIndex; i ++) {
				if(i == startIndex) {
					naviHtml += "<td><a href='javascript:void(0)' class='page' id='firstNavi'>" + i + "</a></td>";
				} else if(i != startIndex && i == endIndex - 1) {
					naviHtml += "<td><a href='javascript:void(0)' class='page' id='lastNavi'>" + i + "</a></td>";
				} else {
					naviHtml += "<td><a href='javascript:void(0)' class='page'>" + i + "</a></td>";
				}
			}
			
			naviHtml += "<td><a href='javascript:void(0)' id='next'>次へ</a></td>"
					 + "<td><a href='javascript:void(0)' id='end'>最後</a></td>"
					 + "<td><input id='jumpToPage' type='text' style='width:" + jumpToPageWidth + ";height:" + jumpToPageHeight + ";'></td></tr>";
		}
		$("#pageNavi").append(naviHtml);
		// ページナビをリフレッシュした後ページリンクにclickToPage関数を付ける
		$(".page").click(clickToPage);
		// ページナビをリフレッシュした後「前へ」イベントを付ける
		$("#prev").click(previous);
		// id=nextの<a>がある場合
		if (totalPage != 1 && totalPage != 0) {
			// ページナビをリフレッシュした後「次へ」イベントを付ける
			$("#next").click(next);
		}
		// ページナビをリフレッシュした後「最前」イベントを付ける
		$("#first").click(first);
		// ページナビをリフレッシュした後「最後」イベントを付ける
		$("#end").click(end);
		// ページナビをリフレッシュした後「page jump」enterイベントを付ける
		$("#jumpToPage").keydown(jumpToPage);
		
		/** ======================== refresh page navi END ========================== */
		
		/** ======================== refresh userInfo table START ========================== */
		var htmlStr = "<tr id='contentTb_th'>";
		// ループして<th>を生成する
		$.each($("#contentTb_th th"), function() {
			htmlStr += "<th>" + $(this).text() + "</th>";
		});
		// <tr>を閉じる
		htmlStr += "</tr>";
		
		$("#contentTb").empty();
		
		// ユーザーリストを取得する
		var userlist = data.userlist;
		// ループ(i:インデックス;n:内容)
		$.each(userlist, function(i, n){
			htmlStr += "<tr id='contentTb_tr_" + n.userId + "'>"
					 + "	<td><input id='userId" + n.userId + "' type='text' value='" + n.userId + "' style='width:5em;' readonly='readonly'></td>"
					 + "	<td><input id='nickname" + n.userId + "' class='input" + n.userId + "' type='text' value='" + n.nickname + "' style='width:8em;' readonly='readonly'></td>"
					 + "	<td><input id='email" + n.userId + "' class='input" + n.userId + "' type='text' value='" + n.email + "' style='width:15em;' readonly='readonly'></td>"
					 + "	<td><input id='password" + n.userId + "' class='input" + n.userId + "' type='text' value='" + n.password + "' style='width:15em;' readonly='readonly'></td>"
					 + "	<td><input id='createTransNo" + n.userId + "' class='input" + n.userId + "' type='text' value='" + n.createTransNo + "' style='width:9em;' readonly='readonly'></td>"
					 + "	<td><input id='updateTransNo" + n.userId + "' class='input" + n.userId + "' type='text' value='" + n.updateTransNo + "' style='width:9em;' readonly='readonly'></td>"
					 + "	<td>"
					 + "		<a id='change" + n.userId + "' href='javascript:void(0)' onclick='change(" + n.userId + ")'>修正</a>"
					 + "		<a id='submit" + n.userId + "' href='javascript:void(0)' style='display:none;' onclick='submit(" + n.userId + ")'>確認</a>"
					 + "	</td>"
					 + "	<td><a id='delete" + n.userId + "' href='javascript:void(0)' onclick='deleteFunction(" + n.userId + ")'>削除</a></td>"
					 + "</tr>";
			});
		$("#contentTb").append(htmlStr);
		/** ======================== refresh userInfo table END ========================== */
		// init css control function
		styleFunc();
	};
	
	/** 次へイベント */
	$("#next").click(next);
	// 次へイベントロジックは基本的に今ナビで表示してる最後のページの次のページのclickToPageイベントの再発行
	function next() {
		// totalPage
		var totalPage = $("#allPage").text();
		// jspから取得したページナビで表示するリンクの数
		var displayNum = $("#hidden_displayNum").val();
		// 今ナビで表示してる最前のページ
		var firstNavi = parseInt($.trim($("#firstNavi").text()));
		// id=lastNaviの<a>は必ず存在してる場合
		if (firstNavi != totalPage && displayNum > 1) {
			// 今ナビで表示してる最後のページ
			var lastNavi = parseInt($.trim($("#lastNavi").text()));
			if (lastNavi < totalPage) {
				// pageIndexはlastNaviの次のページ
				var pageIndex = lastNavi + 1;
				var pageInfo = "pageIndex=" + pageIndex;
				var options = {
						url:'clickToPage.html',
						type:'POST',
						dataType:'json',
						data:pageInfo,
						success: clickToPageResponse,
						error: function(){
							alert("サーバーでエラーが発生しました");
						}
					};
				$.ajax(options);
			} else {
				alert("当前ページは最後です");
			}
		// この場合はnextページを表示する動作と同様
		} else if (displayNum = 1) {
			if (firstNavi < totalPage) {
				var pageIndex = firstNavi + 1;
				var pageInfo = "pageIndex=" + pageIndex;
				var options = {
						url:'clickToPage.html',
						type:'POST',
						dataType:'json',
						data:pageInfo,
						success: clickToPageResponse,
						error: function(){
							alert("サーバーでエラーが発生しました");
						}
					};
				$.ajax(options);
			} else {
				alert("当前ページは最後です");
			}
		} else {
			alert("当前ページは最後です");
		}
	}
	
	/** 前へイベント */
	$("#prev").click(previous);
	function previous() {
		// 今ナビで表示してる最前のページ
		var firstNavi = parseInt($.trim($("#firstNavi").text()));
		// totalPage:jspから取得する
		var totalPage = $("#allPage").text();
		// jspから取得したページナビで表示するリンクの数
		var displayNum = $("#hidden_displayNum").val();
		if (firstNavi != 1) {
			// pageIndexはfirstNaviの前displayNumページ
			var pageIndex = firstNavi - displayNum;
			var pageInfo = "pageIndex=" + pageIndex;
			var options = {
					url:'clickToPage.html',
					type:'POST',
					dataType:'json',
					data:pageInfo,
					success: clickToPageResponse,
					error: function(){
						alert("サーバーでエラーが発生しました");
					}
				};
			$.ajax(options);
		} else {
			alert("当前ページは最前です");
		}
	}
	
	/** 最前イベント */
	$("#first").click(first);
	function first() {
		// curPage:jspから取得する
		var curPage = $("#curPage").text();
		if (curPage <= 1) {
			alert("当前ページは最前です");
			return ;
		}
		var pageIndex = 1;
		var pageInfo = "pageIndex=" + pageIndex;
		var options = {
				url:'clickToPage.html',
				type:'POST',
				dataType:'json',
				data:pageInfo,
				success: clickToPageResponse,
				error: function(){
					alert("サーバーでエラーが発生しました");
				}
			};
		$.ajax(options);
	}
	
	/** 最後イベント */
	$("#end").click(end);
	function end() {
		// totalPage:jspから取得する
		var totalPage = $("#allPage").text();
		// curPage:jspから取得する
		var curPage = $("#curPage").text();
		if (curPage == totalPage) {
			alert("当前ページは最後です");
			return ;
		}
		var pageIndex = totalPage;
		var pageInfo = "pageIndex=" + pageIndex;
		var options = {
				url:'clickToPage.html',
				type:'POST',
				dataType:'json',
				data:pageInfo,
				success: clickToPageResponse,
				error: function(){
					alert("サーバーでエラーが発生しました");
				}
			};
		$.ajax(options);
	}
	
	/** page jump enter イベント */
	$("#jumpToPage").keydown(jumpToPage);
	function jumpToPage(e) {
		var curKey = e.which;
		if (curKey == 13) {
			// totalPage:jspから取得する
			var totalPage = $("#allPage").text();
			var pageIndex = $(this).val();
			// regular expression of integer
			var reg=/^[-+]?\d+$/;
			if (!reg.test(pageIndex)) {
				$(this).val("");
				alert("正しいページナンバーを入力してください");
				return;
			}
			if (pageIndex <= totalPage) {
				var pageInfo = "pageIndex=" + pageIndex;
				var options = {
						url:'clickToPage.html',
						type:'POST',
						dataType:'json',
						data:pageInfo,
						success: clickToPageResponse,
						error: function(){
							alert("サーバーでエラーが発生しました");
						}
					};
				$.ajax(options);
			} else {
				$(this).val("");
				alert("ページ上限を超えました");
			}
			$("input[id='searchChtoEn']").click();
			return false;
		}
	}
	
	/** ============================FUNCTIONS FOR CSS STYLE START ============================================= */
	function styleFunc() {
		$("#first").mouseover(function() {
			$(this).addClass("mouseOverStyle");
		});
		$("#first").mouseout(function() {
			$(this).removeClass("mouseOverStyle");
		});
		$("#prev").mouseover(function() {
			$(this).addClass("mouseOverStyle");
			
			var displayNum = $("#hidden_displayNum").val();
			var hintStr = "前の" + displayNum + "ページ";
			$(this).attr("title",hintStr);
		});
		$("#prev").mouseout(function() {
			$(this).removeClass("mouseOverStyle");
		});
		$("#next").mouseover(function() {
			$(this).addClass("mouseOverStyle");
			
			var displayNum = $("#hidden_displayNum").val();
			var hintStr = "次の" + displayNum + "ページ";
			$(this).attr("title",hintStr);
		});
		$("#next").mouseout(function() {
			$(this).removeClass("mouseOverStyle");
		});
		$("#end").mouseover(function() {
			$(this).addClass("mouseOverStyle");
		});
		$("#end").mouseout(function() {
			$(this).removeClass("mouseOverStyle");
		});
		$(".page").mouseover(function() {
			$(this).css("background","#0073EA");
		});
		$(".page").mouseout(function() {
			// curPage:jspから取得する
			var curPage = $("#curPage").text();
			var pageIndex = $(this).text();
			if (pageIndex == curPage) {
				$(this).css("background","black");
			} else {
				$(this).css("background","#5A5A5A");
			}
		});
		$("a[id^='change']").mouseover(function() {
			$(this).css("background","#0073EA");
		});
		$("a[id^='change']").mouseout(function() {
			$(this).css("background","#5A5A5A");
		});
		$("a[id^='submit']").mouseover(function() {
			$(this).css("background","#0073EA");
		});
		$("a[id^='submit']").mouseout(function() {
			$(this).css("background","#5A5A5A");
		});
		$("a[id^='delete']").mouseover(function() {
			$(this).css("background","#0073EA");
		});
		$("a[id^='delete']").mouseout(function() {
			$(this).css("background","#5A5A5A");
		});
		
		// delete the dotted line after <a> is clicked
		$("#pageNavi a").focus(function() {
			this.blur();
		});
		$("#contentTb a").focus(function() {
			this.blur();
		});
		
		$("#jumpToPage").attr("title","Enterキーでジャンプ");
		
		// 一覧テーブルの偶数行のbackgroundを設定する
		$("#contentTb tr:even").css("background","#EEEEF0");
		$("#contentTb tr:even td input").css("background","#EEEEF0");
		
		// line highlight after mouse over
		$("#contentTb tr[id != contentTb_th]").mouseover(function() {
			var trId = $(this).attr("id");
			$("#" + trId + " td input").css("background","#D0D1D1");
			
			$(this).css("background","#D0D1D1");
		});
		$("#contentTb tr[id != contentTb_th]").mouseout(function() {
			var trId = $(this).attr("id");
			var id = trId.substring(13);
			// 当前行のインデックスを取得する
			var index = $("#contentTb tr").index(this);
			if (index % 2 != 0) {
				$("input[id*=" + id + "]").css("background","white");
				$(this).css("background","white");
			} else {
				$("input[id*=" + id + "]").css("background","#EEEEF0");
				$(this).css("background","#EEEEF0");
			}
		});
		
		// add fadeIn effect
		$("#contentTb tr[id ^= contentTb_tr_]").css("display","none");
		$("#contentTb tr[id ^= contentTb_tr_]").fadeIn("normal");
		
		$("#contentTb tr td input").mouseover(function() {
			$(this).attr("title",$(this).val());
		});
		
		// 当前ページのハイライト表示
		// curPage:jspから取得する
		var curPage = $("#curPage").text();
		$.each($(".page"), function() {
			var pageIndex = $(this).text();
			if (pageIndex == curPage) {
				$(this).css("background","black");
			}
		});
	}
	/** ============================FUNCTIONS FOR CSS STYLE END =============================================== */
});

/** 修正イベント */
function change(id) {
	$("#change" + id).toggle();
	$("#submit" + id).css("display","block");
	
	$(".input" + id).removeAttr("readonly");
	$(".input" + id).css("border","solid #0073EA 1px");
}

/** 確認イベント */
function submit(id) {
	var userInfo = "userId=" + $('#userId' + id).val() 
					+ "&nickname=" + $('#nickname' + id).val() 
					+ "&email=" + $('#email' + id).val() 
					+ "&password=" + $('#password' + id).val() 
					+ "&createTransNo=" + $('#createTransNo' + id).val() 
					+ "&updateTransNo=" + $('#updateTransNo' + id).val();

	var options = {
			url:'update.html',
			type:'POST',
			dataType:'json',
			data:userInfo,
			success: updateResponse,
			error: function(){
				alert("サーバーで異常が発生しました");
			}
		};
	$.ajax(options);
}

//確認イベントのレスポンス関数
function updateResponse(result) {
	var id = result.userId;
	$("#submit" + id).toggle();
	$("#change" + id).css("display","block");
	
	if (result.updRst == 1) {
		$(".input" + id).attr("readonly","readonly");
		$(".input" + id).css("border","solid 0px");
	} else {
		alert("更新失敗しました");
	}
}

/** 削除イベント */
function deleteFunction(id) {
	var hintStr = "userId=" + $('#userId' + id).val() + "のレコードを削除しますか?";
	if (confirm(hintStr)) {
		var userInfo = "userId=" + $('#userId' + id).val() 
		+ "&nickname=" + $('#nickname' + id).val() 
		+ "&email=" + $('#email' + id).val() 
		+ "&password=" + $('#password' + id).val() 
		+ "&createTransNo=" + $('#createTransNo' + id).val() 
		+ "&updateTransNo=" + $('#updateTransNo' + id).val();

		var options = {
				url:'delete.html',
				type:'POST',
				dataType:'json',
				data:userInfo,
				success: deleteFunctionResponse,
				error: function(){
					alert("サーバーで異常が発生した為、削除失敗しました");
				}
		};
		$.ajax(options);
	}
}

//削除イベントのレスポンス関数
function deleteFunctionResponse(result) {
	if (result.delRst == 1) {
		// jspからcurrent pageを取得する
		var pageIndex = $("#curPage").text();
		// jspからtotal pageを取得する
		var totalPage = $("#allPage").text();
		// 当前ページで表示してるレコードの数
		var trNum = $("tr[id^='contentTb_tr_']").length;
		// 当前ページでレコードが1件しか表示してない場合、このレコードの削除を成功した後、前の1ページをpageIndexとして再検索する
		if (totalPage != 1 && pageIndex == totalPage && trNum == 1) {
			pageIndex -= 1;
		// レコードは全部1件しかない場合、このレコードの削除を成功した後、テーブルを空にする
		} else if (totalPage == 1 && pageIndex == totalPage && trNum == 1){
			$("tr[id^='contentTb_tr_']").empty();
			return;
		}
		var pageInfo = "pageIndex=" + pageIndex;
		var options = {
				url:'clickToPage.html',
				type:'POST',
				dataType:'json',
				data:pageInfo,
				success: clickToPageResponse,
				error: function(){
					alert("サーバーでエラーが発生しました");
				}
			};
		$.ajax(options);
	} else {
		alert("削除失敗しました");
	}
}


action:
public class UserPageSearchAction extends BaseAction {

	/** */
	private static final long serialVersionUID = -6960892723912036191L;
	private UserService userService;
	private List<User> userlist;
	private int pageIndex;
	private int countOfPerPage = Constants.COUNT_OF_PERPAGE;
	private int allCount;
	private int totalPage;
	// ページナビで表示するリンクの数
	private int displayNumForPageNavi = Constants.DISP_NUM_FOR_PAGE_NAVI;
	
	/**
	 * @return the userRegisterService
	 */
	
	//从服务器取得list信息,供一览画面使用
	/**
	 * @return the userlist
	 */
	public List<User> getUserlist() {
		return userlist;
	}
	/**
	 * @param userlist the userlist to set
	 */
	public void setUserlist( List<User> userlist ) {
		this.userlist = userlist;
	}
	

	@Override
	protected String executeProcess() throws Exception {
		// TODO Auto-generated method stub
		List<User> allUser =  userService.getAllUser();
		List<User> tmpUserList = new ArrayList<User>();
		if(!allUser.isEmpty()){
			allCount = allUser.size();
//			countOfPerPage = Constants.COUNT_OF_PERPAGE;
			totalPage = allCount <= countOfPerPage ? 1 : (allCount % countOfPerPage == 0 ? allCount / countOfPerPage : allCount / countOfPerPage + 1);
			
			int startIndex = pageIndex > 1 ? (pageIndex - 1) * countOfPerPage : 0;
			
			int length = allCount <= countOfPerPage ? allCount : ((allCount - startIndex) < countOfPerPage ? allCount - startIndex : countOfPerPage);
			
			for (int i = startIndex; i < startIndex + length; i ++) {
				tmpUserList.add(allUser.get(i));
			}
			
			HttpServletRequest req = getRequest();
			
			userlist = tmpUserList;

			// 如果是通过struts方式直接进入该action的,则设置pageIndex为1(此时肯定是第一页)
			if (pageIndex == 0) {
				pageIndex = 1;
			}
			// pageIndexをJSPページのjavaソースに使える為、リクエストにセットする
			req.setAttribute("pageIndex", String.valueOf(pageIndex));
			// totalPageをJSPページのjavaソースに使える為、リクエストにセットする
			req.setAttribute("totalPage", String.valueOf(totalPage));
			// displayNumForPageNaviをJSPページのjavaソースに使える為、リクエストにセットする
			req.setAttribute("displayNumForPageNavi", String.valueOf(displayNumForPageNavi));
			
			return SUCCESS;
		}else{
//			return SUCCESS;
			return "failure";
		}
		
	}
	

}
  • 大小: 67.4 KB
分享到:
评论

相关推荐

    jqgrid加载本地数据并且分页例子

    这个"jqgrid加载本地数据并且分页例子"是一个很好的起点,可以帮助开发者快速理解和实践jqGrid的基本功能。通过这个示例,你可以了解到如何将本地数据与jqGrid结合,实现动态分页和排序,从而为用户提供更友好的数据...

    Spring MVC 分页组件和JqGrid导出

    Spring MVC作为Java企业级应用的主流框架,提供了强大的MVC架构支持,而JqGrid则是一个功能丰富的jQuery插件,专用于创建交互式表格和网格视图。 首先,让我们关注Spring MVC的分页组件。在处理大量数据时,分页是...

    JQGrid 分页

    1. `pager`:指定分页栏的位置,可以是一个DOM元素或一个jQuery选择器。 2. ` rowNum`:每页显示的记录数,默认值是20。 3. `rowList`:用户可以在分页栏选择每页显示的记录数选项,如[10, 20, 50]。 4. `loadonce`...

    jQuery网格插件 jqGrid jQuery Data Grid

    jqGrid是一个强大的基于jQuery的开源插件,专门用于在Web页面上展示和操作网格数据。它提供了丰富的功能,包括数据分页、排序、搜索、编辑、添加、删除和导出,使得在网页中创建交互式数据表格变得简单易行。jqGrid...

    jquery.jqgrid最新版

    jqGrid是基于jQuery库的表格插件,它提供了一套完整的解决方案,包括数据的加载、排序、筛选、分页、编辑以及格式化等。jqGrid支持多种数据源,如JSON、XML、HTML、CSV等,能够无缝集成到各种Web项目中。其核心功能...

    Jquery 实现列的拖动 jquery grid

    在网页开发中,jQuery Grid是一款强大的数据管理组件,它提供了丰富的功能,如数据分页、排序、搜索等。本文将详细讲解如何利用jQuery实现网格(Grid)中的列拖动功能,以及如何展示和压缩内容,以达到类似Excel的...

    jqgrid jquery 表格插件

    jqGrid是一款基于jQuery的开源数据网格插件,它为Web应用程序提供了强大的数据展示和管理能力。这个插件深受开发者喜爱,因为它提供了丰富的功能和自定义选项,使得在网页上创建交互式、功能丰富的表格变得简单易行...

    基于jqgrid实现树形菜单分页列表查询

    "基于jqgrid实现树形菜单分页列表查询"这一主题,旨在创建一个既能展示层级结构又能进行高效分页查询的表格组件。jqGrid是一款强大的jQuery插件,它提供了丰富的功能,如数据网格、分页、排序、过滤、编辑等,同时...

    jqGrid插件包

    在这个例子中,我们创建了一个名为`grid`的jqGrid表格,并设置了数据源、列定义、分页和排序选项。这只是一个基础示例,实际上jqGrid支持许多高级功能,如行内编辑、弹出式编辑、树形结构、子表格、自定义按钮、过滤...

    extjs4Grid和jqGrid对比.doc

    ### ExtJs 4 Grid 与 jqGrid 对比分析 #### 一、数据展示对比 在数据展示方面,ExtJs 4 Grid 和 jqGrid 都采用了 JSON 格式的数据交互方式,但...反之,如果追求快速开发、资源占用低,则 jqGrid 是一个不错的选择。

    jqGrid 做的表格分页

    &lt;script type="text/javascript" src="js/jquery.jqGrid.min.js"&gt; &lt;script type="text/javascript" src="js/jquery.tablednd.js"&gt; &lt;script type="text/javascript" src="js/jquery.contextmenu.js"&gt; ...

    JqGrid插件

    总的来说,JqGrid是一个强大且灵活的前端数据管理工具,它以其丰富的功能和易用性在Web开发中占有一席之地。通过深入理解和使用这个插件,你可以轻松地处理和展示网格数据,提升网页应用的交互性和实用性。

    jqGrid插件源码

    jqGrid是一款功能强大的jQuery插件,专为网页数据表格设计,提供数据的展示、编辑、分页、排序、过滤等多种功能。它以高效、灵活和可定制性著称,广泛应用于Web开发领域,特别是需要处理大量数据的场景。 在"jqGrid...

    jqGrid(jqueryGrid表格操作demo)

    这个"jqGrid(jqueryGrid表格操作demo)"是一个示例项目,用于演示如何在Visual Studio 2010环境下使用jqGrid实现类似Excel的表格操作。 首先,jqGrid的核心特性包括: 1. 数据加载:它可以动态地从服务器获取数据...

    jqgrid 插件

    jqGrid是一款基于jQuery...综上所述,jqGrid是一个强大且灵活的表格插件,它提供了丰富的功能和高度的可定制性,适用于各种Web应用中数据展示和管理的需求。掌握jqGrid的使用和配置,能够极大地提升你的前端开发效率。

    jquery.jqGrid-4.4.3

    jQuery.jqGrid是一个强大的JavaScript插件,专为解决这一问题而设计。在本文中,我们将深入探讨jQuery.jqGrid-4.4.3版本,理解其功能、使用方法以及在实际项目中的应用。 jQuery.jqGrid是基于jQuery库的表格插件,...

    JQGrid本地数据分页

    `JQGrid`是一款强大的JavaScript插件,它基于jQuery库,用于创建交互式的表格,支持各种功能,包括数据分页。在这个“JQGrid本地数据分页”的示例中,我们将探讨如何使用JQGrid实现对本地数据的分页处理。 JQGrid...

    C#封装的JqGrid插件

    2. 创建Web服务或API:为了响应JqGrid的请求,你需要在C#中创建一个Web服务(如ASMX或WCF服务)或者API(如Web API)。这个服务将处理数据的检索、添加、更新和删除操作。 3. 配置JqGrid:在HTML页面中,使用jQuery...

    jquery.jqGrid-4.5.4

    **jQuery.jqGrid-4.5.4**是一款基于JavaScript的开源库,是JQuery框架下的一个强大表格插件。这个版本(4.5.4)提供了丰富的功能,旨在帮助开发者构建交互性强、数据处理能力强的网格视图。在本文中,我们将深入探讨...

    jqueryGridDemo jqGriddemo38

    jQuery Grid,简称jqGrid,是一款基于jQuery的开源数据网格插件,用于展示和管理大量结构化的数据。它提供了丰富的功能,如分页、排序、筛选、编辑、添加、删除以及自定义操作等,使得在Web应用中处理表格数据变得...

Global site tag (gtag.js) - Google Analytics