本篇來具體實現校長角色下的人員管理功能——task4-x
task4-1
,首先大體腦海里設計下,人員管理,無非是增、刪、改、查。
由以上想法,貓哥大體想把人員管理頁面設計為上中下三部分,上為功能標題,中間為人員列表顯示區域,下面為操作按鈕區域。
task4-2
,設計userManage.jsp頁面外觀布局如下:
task4-3
,現在開始加載列表,應該在RouteServlet里面就設定好attribute,然后在userManage.jsp頁面中加載。如下:
但是此時有個問題,RouteServlet是一個Servlet啊,跟數據庫交互應該不歸它管。Servlet是個領導啊,只管接受下屬的信息,然后下達指令,哪里還管從數據取數這樣的具體事物。
再深一步想想,其實下面的代碼也不該歸它具體負責,從內存中取數和從數據庫中取數一個事情,下個命令就完事。
//尋找對應Servlet路徑的jsp文件名 for(String[] menu:loginRoleMenu){ if(menu[1].equals(type)){ type=menu[2]; } } //此處應該將人員信息放入request的attribute request.setAttribute("type",type);task4-4
,我們先重新整理下,將從內存中匹配jsp頁面邏輯寫在一個新類RouteCommand里面,然后將RouteServlet簡化,同時Session中的loginRoleMenu也沒有了存在的必要。所以具體改動如下:
改動1,修改RouteServlet.doPost方法如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//處理post請求 //設置輸入輸出格式、編碼 response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //將獲取type和Session中的loginUser User loginUser=(User)request.getSession().getAttribute("loginUser"); String type=request.getParameter("type"); //根據登錄用戶角色名稱,和用戶點擊菜單的type類型,獲取要定向的jsp地址 RouteCommand routeCmd=new RouteCommand(); String jspUrl=routeCmd.findJsp(loginUser.getUserRole().getRoleName(),type); //此處應該將人員信息放入request的attribute request.setAttribute("type",jspUrl); request.getRequestDispatcher("/index.jsp").forward(request,response);//跳轉到index.jsp }清爽了很多啊。
改動2,RouteCommand
package command;import java.util.Date;import util.Constant;import entity.EntityFactory;import entity.User;import exception.MyException;public class RouteCommand {//接受RouteServlet指令的服務類 //根據登錄用戶角色名稱,和用戶點擊菜單的type類型,獲取要定向的jsp地址 public String findJsp(String roleName,String requestType){ String[][] loginRoleMenu=Constant.roleMenu.get(roleName); for(String[] menu:loginRoleMenu){ if(menu[1].equals(requestType)){ return menu[2]; } } return null; }}task4-5
,依照這個邏輯,我們將查詢人員列表的功能添加進來。首先修改RouteServlet:
然后在RouteCommand里面添加getAllUser方法
//獲取人員列表 public List<User> getAllUser() throws MyException{//此處不處理異常,交由外部調用地方處理 List<User> users=null; try{ //從數據庫中執行查詢,此處暫時使用測試工廠類創建一個代替 users=(List<User>)EntityFactory.CreateEntity("UserList"); }catch(Exception e){ throw new MyException(new Date(),e.getMessage(),"數據庫訪問異常"); } return users; }最后為了測試,在測試工廠繼續修改:
else if(type.equals("UserList")){//獲取人員列表 List<User> users=Arrays.asList( (User)EntityFactory.CreateEntity("User"), (User)EntityFactory.CreateEntity("User"), (User)EntityFactory.CreateEntity("User") ); return users;}task4-6
,最后,修改userManage.jsp頁面中列表部分,以顯示人員列表
稍微加點css美工下(PS,表格樣式是別人分享的,貓哥無一點藝術細胞….尷尬,此處想告訴大家,美工要多學多練,然后才能寫出專屬于自己的美麗):
/* 以下為表格美工*/ #user_table thead, #user_table tr { border-top-width: 1px; border-top-style: solid; border-top-color: rgb(230, 189, 189); } #user_table { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(230, 189, 189); } /* Padding and font style */ #user_table td, #user_table th { padding: 5px 10px; font-size: 12px; font-family: Verdana; color: rgb(177, 106, 104); } /* Alternating background colors */ #user_table tr:nth-child(even) { background: rgb(238, 211, 210) } #user_table tr:nth-child(odd) { background: #FFF }程序運行如下,還是可以的:
至此,查詢已實現。
新聞熱點
疑難解答