怎样使用DispatchAction类调用多个Action方法(本人菜鸟,希望大家多多指教) 使用DispatchAction类调用多个Action方法本人是新手 最近学习 Struts 但是有点晕乎... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 返回的forward可以指向jsp也可以指向另外的Action,这样你可以链多个Action 我帮楼主找到了一些例子,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(读者可以指定自己的请求参数)。 Action方法名必须和用于指定动作的请求参数值一致楼主最好上网找个DEMO 我也是菜鸟,发下我写的,你要重写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"); } } } 呃 这个讲还真不好讲楼主找个例子去看看吧 google张孝祥 在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中的方法 结合上面的那个 action类的代码,struts-config.xml配置文件中 注意加入 parameter="method"在页面中的form指定方法名 例如:<action path="/admin" parameter="method"> 则action="/admin.do?method=Login" 差不多了!Login是你的 action类(继承了dispatchAction)的方法 no SUCH METHOD :MAIN 异常 前辈请进 java 应用 与 web service 通讯 速度 慢死,请高手解决,谢谢!! [雷锋贴]2007备战系分的请加入 weblogic7.0 配置问题? 关于System.loadLibrary()的用法 怎么把jbuilderx + weblogic6.1配置成开发jsp得环境? JSON报错:can not access a member of class * with modifiers "public" 求助!!! jboss-eap-6.0部署项目,404 Java压缩上传的文件为zip格式问题 反射如何调用父类的方法
在使用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(读者可以指定自己的请求参数)。
楼主最好上网找个DEMO
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");
}
}
}
楼主找个例子去看看吧
google张孝祥
再在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中的方法
在页面中的form指定方法名 例如:<action path="/admin" parameter="method"> 则action="/admin.do?method=Login" 差不多了!Login是你的 action类(继承了dispatchAction)的方法