正在用Struts开发一个项目,由于是第一次使用Struts,现在遇到了这样的问题:(一):整个项目大概有十个模型,每个模型都有相同的操作:增,删,改,目前在写第一个模型的时候为这些操作分别定义了一个Action,发现如果剩下的模型像这样写下去的话,这样会使整个应用的Action变得很多啊~~~~
(二):
还是对应每个模型写一个Action类,
如果是这种写法的话:
1。用普通的Action,每个操作都调用这个Action但是在配置文件里有的参数带上ADD,DELET等来标志是哪种操作,然后在Action里调用mapping的获得参数的方法,看是哪种操作转去执行那个方法~~
2。好像Struts自带了一个类DispatchAction这个类跟用上面第1种写法有什么区别呢~~~是用这个呢还是用第1种的呢~~
(一)和(二)的作法有什么性能上和系统开销上的分别呢~~~

解决方案 »

  1.   

    DispatchAction就行
    个人认为,不然ACTION会很多
      

  2.   

    增Action,删Action,改Action,荒谬.
    每一个JSP页面就相当每一个模块功能,在这模块上会有若干个button,如:增加button,删除button,改button,在用户提交时,页面也提交一个标志loop给完成这个模块的Action,使它(Action)知道要增加,删除,还是修改,
    然后,在Action里,就通过loop,判断你的操作是什么,然后就是调用你的JavaBean来完成操作.
    这才是MVC.
      

  3.   

    按照 liangkandy2002(不死vs暗夜) 的说法,是不是这样做呢,
    比如说对于这个项目第一个模型就是资产管理人,是不是写一个
    UserAction呢,
    public class UserAction extends DispatchAction{
       是不是在这里有个判断的标志 String loop="";
       if(loop等于ADD){
      您所谓的调用JavaBean是定义在这个模型Action里的对应操作方法 增,删,改吗?      ActionForward 
       }
      else if(...){
       ......
     }
       //当请求参数method的值为ADD时,调用下面的addFoward()方法处理请求
       public ActionForward add(ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response){
         }
      
    }
    感觉用这个DispatchAction每次一个提示的时候:http://localhost/equipment/UserAction是不是得在它后面加参数啊http://localhost/equipment/UserAction?method=ADD....如果是这样的话还不如直接写:
    public class UserAction extends Action{
       是不是在这里有个判断的标志 String loop="";
       if(loop等于ADD){
      所谓的调用JavaBean是定义在这个模型Action里的对应操作方法 增,删,改吗?      ActionForward 
       }
      else if(...){
       ......
     }
      public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) {
       每个请求进来的时候都要经过execute方法然后在这里
        ActionForward myforward = null;
        String loop= mapping.getParameter();
      接下来是一大串的if判断是等于加,还是删,改。。
      if ("ADD".equalsIgnoreCase(loop)) {
          myforward = performADD(mapping, form, request, response);
        }
       else if(。。){
       。。  
     }  
    }
    上面的两种方法用哪种比较好点呢
    另外有个疑问是如果是不采用一个操作一个Action而用这种的话,像程序进到这独一的模型后不是得进行大量的逻辑判断,流程判断吗,这样系统性能会相对降低吗
      

  4.   

    现在好像遇到了用DispachAction的限制地方,也就是说对应于每个模型的增加,删除,修改,增加和修改的这两个操作所需要的ActionForm并不一样啊,假如说使用DispachAction的话在每个操作的ActionForm不一样的情况下怎么用啊?
    另外请问各位前辈,同一个模块都用一个action,在对于不同的功能上,加参数来分别处理处理?
    你们也是这么做的吗?
      

  5.   

    package action;import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;import com.legenddg.dgquery.bean.DeptBean;import form.DeptForm;/**
     * @version  1.0
     * @author
     */
    public class DeptAction extends Action{ public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {

    ActionErrors errors = new ActionErrors();
    ActionForward forward = new ActionForward(); // return value
    DeptForm deptForm = (DeptForm) form;
    HttpSession session = request.getSession();
    ServletContext servletContext = session.getServletContext();
    String path = servletContext.getRealPath(request.getRequestURI());
    path = path.substring(0,path.lastIndexOf("\\"));
    path = path.substring(0,path.lastIndexOf("\\"));
    DeptBean deptBean = new DeptBean();
    forward = mapping.findForward("local");
    int loop = deptForm.getLoop();
    if(loop==1){
    forward = mapping.findForward("local");
    return (forward);
    }
    if(loop==2){
    deptBean.printDeptScheduleExcel(form,session,path);
    forward = mapping.findForward("local");
    return (forward);
    }
    if(loop==3){
    deptBean.printDeptSchedulePDF(form,session,path);
    forward = mapping.findForward("local");
    return (forward);
    }

    return (forward); }}