單擊表頭儲存格實現排序
在DRP項目中,講解真是詳略得當。對原理性和思想像的內容(比如Servlet、filter過濾器)進行了細緻的分析並用RationalRose畫程式執行順序圖(流程圖)。對於簡單的內容則被布置成作業或提出建議,自行完善和完成。本文,將實現其中的一個作業“單擊表頭儲存格,對內容進行排序後重新輸出”。
sql查詢語句(以user_id為 標識 排序)為:select user_id,user_name from t_user order by user_id;
商務邏輯代碼(MVC中的C層):(在DRP項目中,被嵌入在了jsp頁面上,雖然代碼寫在頁面上,但任然是服務端代碼)
<%int pageNo = 1;int pageSize = 10;// 聲明一個分頁執行個體PageModel<User> pageModel = null;// 排序String order = request.getParameter("command"); // 擷取當前頁碼String pageNo_call = request.getParameter("pageNo_Now");int pageNo_back = 0 ;if(pageNo_call != null) {pageNo_back = Integer.parseInt(pageNo_call);}// 擷取排序欄位String orderField = request.getParameter("orderField");/** * 使用者列表顯示 ** 若是排序操作,按排序後的資料顯示 ** 在沒有排序操作的前提下,進行無序初始化 */if("order".equals(order)) {// 排序後網頁顯示pageModel = UserManager.getInstance().orderUser(pageNo_back,pageSize,orderField);}else{// 網頁初始化(未排序)pageModel = UserManager.getInstance().findUserList(pageNo, pageSize);} %>
js代碼:
<script type="text/javascript">// 排序function order(field) {// 取得當前頁號 var pageNo_Now = <%= pageModel.getPageNo()%>;// 點擊 使用者代碼if(field.id == "user_ID") {// 傳遞 排序的對象var orderField = "user_id"; window.self.location = "user_maint.jsp?pageNo_Now=" + pageNo_Now + "&orderField=" + orderField + "&command=order";}// 點擊 使用者名稱稱if(field.id == "user_Name") {// 傳遞 排序的對象var orderField = "user_name"; window.self.location = "user_maint.jsp?pageNo_Now=" + pageNo_Now + "&orderField=" + orderField + "&command=order";}// 點擊 聯絡電話if(field.id == "user_ContactTel") {// 傳遞 排序的對象var orderField = "contact_tel"; window.self.location = "user_maint.jsp?pageNo_Now=" + pageNo_Now + "&orderField=" + orderField + "&command=order";}// 點擊 emailif(field.id == "user_Email") {// 傳遞 排序的對象var orderField = "email"; window.self.location = "user_maint.jsp?pageNo_Now=" + pageNo_Now + "&orderField=" + orderField + "&command=order";}// 點擊 建立時間if(field.id == "user_CreateDate") {// 傳遞 排序的對象var orderField = "create_date"; window.self.location = "user_maint.jsp?pageNo_Now=" + pageNo_Now + "&orderField=" + orderField + "&command=order";}}</script>
jsp中的表格:(MVC中的V層)
<!--
為表頭thead欄位設定id標籤和onclick="order(this)"觸發事件
-->
<table id="userTable" width="95%" border="1" cellspacing="0" cellpadding="0" align="center" class="table1" ><thead><tr><td width="55" class="rd6"><input type="checkbox" name="ifAll" onClick="checkAll(this)"></td><td width="119" class="rd6" onclick="order(this)" id="user_ID">使用者代碼</td><td width="152" class="rd6" onclick="order(this)" id="user_Name">使用者名稱稱</td><td width="166" class="rd6" onclick="order(this)" id="user_ContactTel">聯絡電話</td><td width="150" class="rd6" onclick="order(this)" id="user_Email">email</td><td width="153" class="rd6" onclick="order(this)" id="user_CreateDate">建立日期</td></tr></thead><tbody><%// 運用Iterator迭代器,遍曆集合,填充表格內容List<User> userList = pageModel.getList();for(Iterator<User> iter = userList.iterator();iter.hasNext();) {User user = (User)iter.next();%><tr><td class="rd8"><input id="<%=user.getUserId()%>" type="checkbox" name="selectFlag" class="checkbox1"value="<%= user.getUserId() %>" /></td><td class="rd8"><%=user.getUserId() %></td><td class="rd8"><%=user.getUserName() %></td><td class="rd8"><%=user.getContactTel() %></td><td class="rd8"><%=user.getEmail() %></td><td class="rd8"><%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate()) %></td></tr><%}%></tbody></table>
資料操作層(MVC中的M層):查詢資料並實現排序
public class UserManager {private static UserManager instance = new UserManager();private UserManager() {}public static UserManager getInstance() {return instance;}/** * 【有序】 分頁查詢 使用者資訊 * * @param pageNo 當前頁碼 * @param pageSize 每頁顯示的記錄數 * @param orderField 排序匹配欄位 * @return 有序的使用者資訊 */public PageModel<User> orderUser(int pageNo,int pageSize,String orderField) {String sql = "select user_id, user_name, contact_tel, email, create_date from t_user where user_id <> 'root' order by "+ orderField;Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;PageModel<User> pageModel = null;try {conn = DbUtil.getConnection();pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();List<User> userList = new ArrayList<User>();while (rs.next()) {User user = new User();user.setUserId(rs.getString("user_id"));user.setUserName(rs.getString("user_name"));user.setContactTel(rs.getString("contact_tel"));user.setEmail(rs.getString("email"));user.setCreateDate(rs.getTimestamp("create_date"));userList.add(user);};pageModel = new PageModel<User>();pageModel.setList(userList);pageModel.setTotalRecords(getTotalRecords(conn));pageModel.setPageNo(pageNo);pageModel.setPageSize(pageSize);} catch (SQLException e) {e.printStackTrace();}finally {DbUtil.close(rs);DbUtil.close(pstmt);DbUtil.close(conn);}return pageModel;}}
通過細節上的完善,增強使用者體驗度。對使用者來說用起來更加便利了,對程式設計者來說,更好地通過職能去實現智能,因為程式本身就是一個找規律的事情。程式設計就是通過總結規律,實現規律的可重複性。找出更多的的規律,在合適的時候執行,在增強使用者體驗度的同時,增強了職能。