思维导图由上可见
问题:解决实体类封装问题
例如:不知道实体类的类名和其属性;
解决方法:在子控制器中写
ActionSupport action = (ActionSupport) Class.forName(type).newInstance(); //实例化
if(action instanceof ModelDriver) { //判断action是否继承ModelDriver接口
ModelDriver m = (ModelDriver) action;
Object obj = m.getMode(); //拿到对象
// 有对象就接收所有的前端JSP传递到后台的参数
Map<String, String[]> parameterMap = req.getParameterMap();
// 对 obj对象 赋值
BeanUtils.populate(obj, parameterMap);//把所有的参数赋值给obj对象
}
这样写好处在于:需要更改实体类属性时只需要更改jsp页面代码和实体类属性代码即可
问题:解决转发和重定向代码重复
思路: * 1.方法执行完毕必须有一个返回值
* 2.通过返回值决定是否重定向,还是转发
* 3.通过返回值决定跳转哪一个页面
代码:
String res = action.execute(req, resp); //拿到返回值
ForwardModel forwardModel = actionModel.pop(res);
if(forwardModel.isRedirect()) { //判断是否重定向还是转发
resp.sendRedirect(req.getContextPath()+forwardModel.getPath());
}else {
req.getRequestDispatcher(forwardModel.getPath()).forward(req, resp);
}