使用DispatchAction类调用多个Action方法本人是新手 最近学习 Struts 但是有点晕乎...

解决方案 »

  1.   

    返回的forward可以指向jsp也可以指向另外的Action,这样你可以链多个Action
      

  2.   

    我帮楼主找到了一些例子,Copy上来一部分,希望对你哟所帮助吧!因为那篇文章篇幅多于10000 个字符,你要是想更清楚的明白 我给你个详细地址http://www.sunxin.org/forum/thread/21520.html
    在使用Struts动作时,每一个Action都需要编写一个类,并且要在struts-config.xml进行配置。这对于一个拥有很多Action的Web程序来说,工作量是非常大的。为此,Struts提供了DispatchAction类,这个类允许将一个Action作为一个方法来调用。在Web浏览器中通过请求参数来指定要调用的动作。
        虽然DispatchAction类是一个抽象类,但其中却没有一个抽象方法。因此,DisplatchAction的子类不用实现任何DisplatchAction类中的方法。但如果要处理Action代码,就必须根据相应的Action来编写Action方法。一个Action方法除了方法名和execute方法不一样外,其他的都和execute方法完全一样。但编写Action方法时要注意,Action方法名必须和用于指定动作的请求参数值一致(大小写也必须一致)。在下面的例子中演示了通过DispatchAction类实现方法和Action的对应。在这个例子中,有三个方法:fr、en和unspecificed。其中fr和en是两个Action方法,分别用于将当前页面转发到法文和英文页面,而当用于指定Action的请求参数不存在时,则调用unspecificed方法(在这个方法中将当前页面转发到中文页面)。在这个程序中使用的用于指定Action的请求参数为language(读者可以指定自己的请求参数)。
     
      

  3.   

    Action方法名必须和用于指定动作的请求参数值一致
    楼主最好上网找个DEMO
      

  4.   

    我也是菜鸟,发下我写的,你要重写excute方法,比如public ActionForward Login(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    }就是我重写的方法
    package com.tb.struts.action;import java.util.ArrayList;
    import java.util.List;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;import com.tb.model.entity.QuestionNaire;
    import com.tb.model.entity.Questions;
    import com.tb.model.entity.Result;
    import com.tb.model.entity.Users;
    import com.tb.model.service.Service;
    import com.tb.util.DateDisposal;
    import com.tb.util.NumberManage;public class DoAction extends DispatchAction { /**
     * Login页面业务逻辑处理
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public ActionForward Login(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    Users user = new Users();
    // 获取登录用户IP
    String ip = request.getRemoteAddr();
    // 获取登录用户名
    String username = request.getParameter("username"); // 依据用户信息做不同的操作
    if (Service.UsersService().checkUser(ip, username) == 0) {
    user.setIp(ip);
    user.setUsername(username);
    Service.UsersService().Add(user);
    user = Service.UsersService().findByNameAndIp(username, ip);
    } else {
    user = Service.UsersService().findByNameAndIp(username, ip);
    }
    // 将登录用户信息丢到session里
    request.getSession().setAttribute("user", user);
    // 获取所有问卷信息
    List<QuestionNaire> list = (List<QuestionNaire>) Service
    .QuestionNaireService().findAll();
    // 将所有问卷信息丢入Attribute
    request.setAttribute("list_questionNaire", list);
    // 跳转
    return mapping.findForward("ToShowList");
    } /**
     * AddQuestion页面业务逻辑处理
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward AddQuestion(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception { Long countAnswer = Long.parseLong(request.getParameter("countanswer"));
    String question = request.getParameter("question");
    Long naire_id = Long.parseLong(request.getParameter("naire_id")); Questions questions = new Questions();
    questions.setNaire_id(naire_id);
    questions.setQuestion(question);
    questions.setCountanswer(countAnswer); Service.QuestionService().Add(questions); QuestionNaire questionNaire = Service.QuestionNaireService().findById(
    naire_id);
    List<Questions> questionsList = Service.QuestionService()
    .findBynaire_id(naire_id);
    request.setAttribute("questionNaire", questionNaire);
    request.setAttribute("list_questions", questionsList); return mapping.findForward("ToUpdateQuestionNaire"); } /**
     * AddQuestionNaire页面业务逻辑
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public ActionForward AddQuestionNaire(ActionMapping mapping,
    ActionForm form, HttpServletRequest request,
    HttpServletResponse response) throws Exception { QuestionNaire questionNaire = new QuestionNaire(); questionNaire.setCount(0l);
    questionNaire.setBeginTime(DateDisposal.stringToDate(request
    .getParameter("beginTime")));
    questionNaire.setEndTime(DateDisposal.stringToDate(request
    .getParameter("endTime")));
    questionNaire.setIpconfig(Long.parseLong(request
    .getParameter("ipconfig")));
    questionNaire.setPlace(Long.parseLong(request.getParameter("place")));
    questionNaire.setResult(Long.parseLong(request.getParameter("result")));
    questionNaire.setTitle(request.getParameter("title"));
    questionNaire.setTypeOf(Long.parseLong(request.getParameter("typeOf")));
    questionNaire.setWriter(request.getParameter("writer")); // 调用add方法新增信息
    Service.QuestionNaireService().Add(questionNaire); List<QuestionNaire> list = (List<QuestionNaire>) Service
    .QuestionNaireService().findAll();
    // 将所有问卷信息丢入Attribute
    request.setAttribute("list_questionNaire", list);
    return mapping.findForward("ToShowList");
    } /**
     * QuestionNaire页面业务逻辑处理
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */ @SuppressWarnings("unchecked")
    public ActionForward QuestionNaire(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    String type = request.getParameter("type") == null ? "" : request
    .getParameter("type");
    // 点击取消时
    if (type.equals("toList")) {
    List<QuestionNaire> list = (List<QuestionNaire>) Service
    .QuestionNaireService().findAll();
    // 将所有问卷信息丢入Attribute
    request.setAttribute("list_questionNaire", list);
    return mapping.findForward("ToShowList");
    }
    // 点击查看时
    if (type.equals("toResult")) {
    // 获取到主题ID
    Long naire_id = Long.parseLong(request.getParameter("id"));
    // 由主题ID查找对应的主题对象
    QuestionNaire questionNaire = Service.QuestionNaireService()
    .findById(naire_id);
    if (questionNaire.getResult().equals(0l)) {
    request.setAttribute("resultMsg", "该主题不允许查看比例图!"); List<Questions> questions = Service.QuestionService()
    .findBynaire_id(naire_id);
    request.setAttribute("questionNaire", questionNaire);
    request.setAttribute("list_questions", questions); return mapping.findForward("ToQuestionNaire");
    } else {
    // 由主题ID查找里面所有Questions对象
    List<Questions> list1 = Service.QuestionService()
    .findBynaire_id(naire_id); // 获取基数
    Long num2 = questionNaire.getCount();
    // 创建以ResultPercentVo为泛型的list对象
    List<com.tb.model.vo.ResultPercentVo> list2 = new ArrayList<com.tb.model.vo.ResultPercentVo>();
    // 填充ResultPercentVo
    for (Questions u : list1) {
    com.tb.model.vo.ResultPercentVo resultPercentVo = new com.tb.model.vo.ResultPercentVo();
    resultPercentVo.setQuestion_id(u.getId());
    resultPercentVo.setPerson_num(u.getCountanswer());
    resultPercentVo.setPercent(NumberManage.percent(u
    .getCountanswer(), num2));
    list2.add(resultPercentVo);
    } // 获取Result表中主题为此主题的记录
    List<com.tb.model.entity.Result> list3 = Service
    .ResultService().findByNaireid(naire_id);
    // 创建VO对象
    List<com.tb.model.vo.ResultVo> list4 = new ArrayList<com.tb.model.vo.ResultVo>();
    // 填充
    for (com.tb.model.entity.Result m : list3) {
    if (m.getAnswer().equals(1l)) {
    Users user = new Users();
    user = Service.UsersService().findById(m.getUserid());
    Questions question = Service.QuestionService()
    .findById(m.getQuestions_id());
    com.tb.model.vo.ResultVo resultVo = new com.tb.model.vo.ResultVo();
    resultVo.setUsername(user.getUsername());
    resultVo.setQuestion(question.getQuestion());
    list4.add(resultVo);
    }
    }
    // 主题对象传递
    request.setAttribute("questionNaire", questionNaire);
    // 向页面传递ResultPercentVo的LIST
    request.setAttribute("ResultPercentVo", list2);
    // 页面传递resultVo的List
    request.setAttribute("resultVolist", list4); return mapping.findForward("ToResult");
    }
    }
    // 点击提交时
    else { // 获取到被选中的问题的ID
    Long question_id = Long.parseLong(request.getParameter("answer"));
    // 获取主题ID
    Long naire_id = Long.parseLong(request.getParameter("naire_id"));
    // 查找此主题信息
    QuestionNaire questionNaire = Service.QuestionNaireService()
    .findById(naire_id);
    // 设置此主题回答人数
    questionNaire.setCount(questionNaire.getCount() + 1);
    // 调用update方法修改
    Service.QuestionNaireService().update(questionNaire.getId(),
    questionNaire);
    // 获得session里的users对象
    Users user = (Users) request.getSession().getAttribute("user");
    // 获得userid
    Long user_id = user.getUserid();
    // 根据主题ID查找所有在此主题下的问题集合
    List<Questions> list1 = Service.QuestionService().findBynaire_id(
    naire_id);
    // 往问题表中添加结果记录
    for (Questions u : list1) {
    Result result = new Result(); result.setNaire_id(naire_id);
    result.setUserid(user_id);
    result.setQuestions_id(u.getId());
    if (u.getId().equals(question_id)) { Questions questions = new Questions();
    questions.setNaire_id(naire_id);
    questions.setQuestion(u.getQuestion());
    questions.setId(u.getId());
    // 设置将被选中的问题的count+1
    questions.setCountanswer(u.getCountanswer() + 1); Service.QuestionService().update(u.getId(), questions); result.setAnswer(1l);
    } else {
    result.setAnswer(0l);
    }
    Service.ResultService().Add(result);
    } List<QuestionNaire> list = (List<QuestionNaire>) Service
    .QuestionNaireService().findAll();
    // 将所有问卷信息丢入Attribute
    request.setAttribute("list_questionNaire", list);
    return mapping.findForward("ToShowList");
    }
    }
    }
      

  5.   

    呃 这个讲还真不好讲
    楼主找个例子去看看吧 
    google张孝祥
      

  6.   

    在Action中重写execute()方法
    再在struts-config.xml中配置
    <struts-config>
      <data-sources />
      <form-beans>
          <!-- 管理者模块 -->
         <form-bean name="adminForm" type="com.newer.adminManager.web.form.AdminForm">
    </form-bean>
    <form-beans>
    <action-mappings>
          <!-- 管理者模块 -->
      <action path="/admin"
       name="adminForm"
       parameter="o"
       scope="request">
          <forward name="LOGIN_SUCCESS" path="/admin/index.jsp" redirect="true"></forward>
          <forward name="LOGIN_ERROR" path="/admin/login.jsp"></forward>
            </action>根据parameter找action中的方法
      

  7.   

    结合上面的那个 action类的代码,struts-config.xml配置文件中  注意加入 parameter="method"
    在页面中的form指定方法名 例如:<action path="/admin" parameter="method">  则action="/admin.do?method=Login"  差不多了!Login是你的 action类(继承了dispatchAction)的方法