DispactchAction要注意的地方!

本文介绍了Struts框架中DispatchAction的使用方法,强调了form表单method属性的重要性,并通过实例详细展示了如何配置并实现多方法调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚接触struts,到网上搜了不少相关内容,在学习dispatchaction时,到网上搜的帖子代码居然无法使用,后来问教员才知道自己出现的问题,于是拿出来和大家一起分享。

一般举例都是这样的:如下(<!--  -->之间是我搜的帖子内容)

<!-- 

DispatchAction 类是一个抽象类 , 它实现了父类 (Action) execute() 方法 , 所以它的子类就不用来实现这个方法了,只需要专注与实际操作的方法 ,
     1. 首先要一个 DispatchAction 的子类 , 它含有 2 个方法 ,pro1,pro2,
       public class LoginAction extends DispatchAction {
           public ActionForward pro1(ActionMapping mapping, ActionForm form,
                                                HttpServletRequest request, HttpServletResponse response) throws Exception {
                                              System.out.println("pro1");
                                             return mapping.findForward("success");  
                        }
            public ActionForward pro2(ActionMapping mapping, ActionForm form,
                                                HttpServletRequest request, HttpServletResponse response) throws Exception {
                                              System.out.println("pro2");
                                             return mapping.findForward("success");  
                        }
       }
 
      一定要注意在 DispatchAction 中所以你想执行的操作 , 都必须要有统一的参数 (ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response), 是一个规定 .
2. 接下来是配置 struts-config.xml
 
     <action path="/Login1"
    type="action.LoginAction"
    name="TelForm"
    attribute="tel"
     scope="request"
    parameter="action"
    input="/jsp/dispatch1.jsp">
   <forward name="success" path="/jsp/success1.jsp" />
  </action>
   这里需要注意的就是 parameter 属性的值 , 因为这个值要和页面传来的参数对应 .
3. 再来看看 JSP jsp/dispatch1.jsp
  添加如下的 FORM
<form action="Login1.do?action=pro1">
username:<input name="username"/><br>
<input type="submit" value="submit"/>
</form>
 
    这里要注意几点 , 首先 ? 后面的 KEY 要和 struts-config.xml 中的 parameter 相同 , 还有它的 VALUE 要是你在 action 的一个方法名字
这里方法名为 pro1, 那么在程序运行时就是调用 pro1 的操作 , 如果是 pro2, 那程序就调用 pro2 的操作 .
-->
我照帖子所说做了恩编,但老报错,第二天去问教员才知道还有一个重要的地方掉了,就是form表单的
method属性必须为post,而且必须显示写出来
<form action="Login1.do?action=pro1" method="post">
希望能和大家一起分享,虽然很简单,但细节真的很重要!
小技巧
<a href="addUser.do?method=addUser&username=${classId}">Add User</a>
调用方法的同时传递值
  DispatchAction本身就是扩展于Action,然后重写过Action中的execute方法,这是核心来的,在execute方法里头实现参数(parameter)功能。但是重新写过DispatchAction的核心方法execute,所以DispatchAction参数(parameter)功能就没能实现。
 
因为控制器直接调用Action子类的execute方法,所以就打印出"execute"
DispatchAction.java 的部分源代码:  
          public   ActionForward   execute(ActionMapping   mapping,  
                                                                    ActionForm   form,  
                                                                    HttpServletRequest   request,  
                                                                    HttpServletResponse   response)  
                  throws   Exception   {  
   
                  //   Identify   the   request   parameter   containing   the   method   name  
                  String   parameter   =   mapping.getParameter();  
                  if   (parameter   ==   null)   {  
                          String   message   =  
                                  messages.getMessage("dispatch.handler",   mapping.getPath());  
                          log.error(message);  
                          response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,  
                                                                message);  
                          return   (null);  
                  }  
   
                  //   Identify   the   method   name   to   be   dispatched   to.  
                  //   dispatchMethod()   will   call   unspecified()   if   name   is   null  
                  String   name   =   request.getParameter(parameter);  
   
                  //   Invoke   the   named   method,   and   return   the   result  
                  return   dispatchMethod(mapping,   form,   request,   response,   name);  
          }  
资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展与成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以扩展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值