您的位置:首页 > 其它

点击这些按钮时进入到同一个action中找到相应的方法

2009-10-25 20:51 411 查看
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
}


来自:http://topic.csdn.net/u/20091016/14/d466dc26-7ca0-4006-b413-83e1cb63547d.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐