HTML code
<form action="arrayaction.do" method="get"> <input type="button" value="插入"/> <input type="button" value="删除"/> <input type="button" value="修改"/> <input type="button" value="显示"/> </form>
问题是这样的:页面上有多个按钮,我需要当点击这些按钮时全部进入到同一个action中,但是这个action中有不同的方法.比如insert() delete()等,我点击不同按钮时怎么能够让它找到相应的方法呢?
不用JavaScript、DispatchAction就可以来做:
-
HTML code
-
< form action ="arrayaction.do" method ="get" > < input type ="button" value ="插入" name ="insert" /> < input type ="button" value ="删除" name ="delete" /> < input type ="button" value ="修改" name ="modify" /> < input type ="button" value ="显示" name ="list" /> </ form >
假如用户点了“插入”按钮,这时:
request.getParameter("insert")=="插入";
request.getParameter("delete")==null;
request.getParameter("modify")==null;
request.getParameter("list")==null;
以此类推!也就是说无论多少submit类型的按钮,只有一个不为空。这时在Struts1的Action中以用反射方法来做:
-
Java code
-
public class MyAction extends Action{ // 注意,这里并不需要继承DispatchAction public ActionForward execute(ActionMapping mapping, ActionForm from, HttpServletRequest request, HttpServletResponse response) throws Exception { String func = { " insert " , " delete " , " modify " , " list " }; String methodName = null ; for (String f : func){ if (request.getParameter(f) != null ){ methodName = request.getParameter(f); break ; } } try { // 利用反射技术让程序自动找到要处理的方法并执行之,注意methodName参数 Method method = this .clazz.getDeclaredMethod(methodName, ActionMapping. class , ActionForm. class , HttpServletRequest. class , HttpServletResponse. class ); return (ActionForward)method.invoke( this , mapping, from, request, response); } catch (Exception e) { request.setAttribute( " message " , e.getMessage()); return mapping.findForward( " message " ); } } public ActionForward insert(ActionMapping mapping, ActionForm from, HttpServletRequest request, HttpServletResponse response) throws Exception { // todo } public ActionForward delete(ActionMapping mapping, ActionForm from, HttpServletRequest request, HttpServletResponse response) throws Exception { // todo } public ActionForward modify(ActionMapping mapping, ActionForm from, HttpServletRequest request, HttpServletResponse response) throws Exception { // todo } public ActionForward list(ActionMapping mapping, ActionForm from, HttpServletRequest request, HttpServletResponse response) throws Exception { // todo }