1. 程式人生 > >struts2學習04——資料封裝核心機制

struts2學習04——資料封裝核心機制

struts2的資料封裝,主要是藉助java反射機制實現的,下面通過簡單的程式碼示例來回顧一下今天的學習。

通過模型驅動的方式,我們在Action中,常會出現以下的程式碼:

public class LoginServlet extends BaseServlet {
	Users us = new Users();
	
	public String execute() throws Exception {
		System.out.println(us.getUsername());
		System.out.println(us.getPassword());
		return "success";		
	}
	
	public Users getModel() {
		return us;
	}
}



struts2框架,將資料的封裝工作完成了,我們只需要定義一個例項物件,並按照規定語法來編寫,就可以自動的獲取到頁面表單的資料,並封裝到例項類中,例如上面的us例項。 為了完成從頁面獲取資料,並將其封裝到例項類中,需要以下步驟: 1.在請求傳送過來,進入action之前,先執行getModel方法,獲取要將表單資料封裝到哪個實體類中
2.得到該物件後,我們可以獲得 類型別
3./獲得類型別之後, 獲取類屬性
4.request.getParameterNames()獲取表單提交的資料名
5.從而獲取表單提交的資料
6.如果表單中資料name和實體類中的屬性名一致
7.將表單資料寫入實體類中 例如上面的LoginServlet相當於在struts2開發中的Action,那麼他的父類BaseServlet就相當於struts2開發中的ActionSupport類 則根據上面的分析,我們可以實現出BaseServlet中doPost的程式碼:
public class BaseServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			Method method = this.getClass().getDeclaredMethod("getModel", null);
			Object ob = method.invoke(this, null);
			System.out.println(ob);
			Field[] fd = ob.getClass().getDeclaredFields();
			Enumeration<String> em = request.getParameterNames();
			while(em.hasMoreElements()){
				String fieldName = em.nextElement().toString();
				System.out.println("表單的屬性名:"+fieldName);
				for(int i=0;i<fd.length;i++){
					if(fd[i].getName().equals(fieldName)){
						String val = request.getParameter(fd[i].getName());
						fd[i].setAccessible(true);
						fd[i].set(ob, val);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}