struts formbean 就是鸡肋

xiaoxiao2026-03-14  9

[b]理由如下:[/b] 1.由于后台数据库表字段的修改造成此formbean的修改,同时前端表现页面展现代码要修改,Action类也要跟着修改,也就是业务代码要修改,开发初期表的字段增删改是非常正常的,没有人能做到设计都是完美不用修改的。 2.有些人美其名曰formbean是面向对象,面向对象造成了开发与维护的如此繁琐,为OO而OO,得不偿失。最需要OO的地方是业务规则以及框架。 [b]我们需要什么:[/b] 1.struts的action控制机制还是要保留,tag部分可以彻底扔掉。 2.在表现层与业务逻辑层我们传递的就是VO(数值对象)而已。需要的只是一个数据存放的容器而已,能做到通用就行了。难道非要写成bean.getXXX()的形式才叫OO么? 3.对于刚刚接触struts的人,或者不喜欢用标签的人,怎么样才能更好的完成协作开发呢? 我们只需要他们会html,java就可以了,让标签们见鬼去吧,让formbean见鬼去吧。 [b]改进方案:[/b] 1.一个通用的action ,BaseAction extendsAction.负责完成http request,http session的参数收集与整理,形成一个通用的form,BaseForm extends ActionForm. 此BaseForm就可以传递到表现层了。 2.如果你有些地方需要使用标签,可能因为您偏爱或者习惯使用struts标签了,所以你可以继承这个BaseForm,然后添加你的方法和属性。而对于不习惯的人,则可以使用方案1的逻辑了。 3.BaseAction最好能实现几个通用功能,比如分页,普通查询,修改,插入等,这样各个实现的业务action在代码上减少很多,维护就更简单了。 [b]代码实现:[/b] public class OrderAction extends BaseAction {public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //解析request 和 session 参数,在BaseAction中实现 BaseForm bf = this.parse(request, response); //没准你还想在返回页面得到请求的参数 request.setAttribute(BaseForm.NAME, bf); String action = (String) bf.getStringData("action"); try { if (action.equals("add") { ..... request.setAttribute("xxxx", xxx); return mapping.findForward("xxx"); } else if (action.equals("list")) { ..... request.setAttribute("xxxx", xxxxx); return mapping.findForward("xxxxx"); } else ..... }catch (Exception ex) { ...... return mapping.findForward("error"); } }} 或者 public class TaskMonitor extends BaseAction{ Logger log = Logger.getLogger(OrderAction.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { try { BaseForm bf = this.parse(request, response); request.setAttribute(BaseForm.NAME, bf); String actionjsp=""; String action = (String) bf.getStringData("action"); if(action.equals("list")||action.equals("")) { actionjsp="tasklist"; doGetTaskList(bf); } request.setAttribute(BaseForm.NAME, bf); return mapping.findForward(actionjsp); } catch (Exception ex) { this.resetToken(request); request.setAttribute("error", ex); return mapping.findForward("error"); } } private void doGetTaskList(BaseForm bf) { //get request value and do business work //set response value and return } public class BaseForm extends ActionForm {private Map datas=new HashMap(); public Object getData(String name) { return datas.get(name.toUpperCase()); } public Object setData(String name,Object obj) { return datas.put(name.toUpperCase(),obj); }} 整个配置文件就一个formbean而已<struts-config> <form-beans> <form-bean name="baseform" type="********.****.***.BaseForm"></form-bean> </form-beans></struts-config> jsp页面 <%@ page contentType="text/html; charset=gb2312" %><%@ page import="com.****.framework.util.BaseForm" %><%@ page import="com.****.framework.util.BaseAction" %><%String path = request.getContextPath();BaseForm bf=(BaseForm)request.getAttribute(BaseForm.NAME);//you can get the request parameters and response parameters//by method getData("xxx");%>
转载请注明原文地址: https://www.6miu.com/read-5045881.html

最新回复(0)