`
heimeiyingwang
  • 浏览: 94131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts知识辅导(2--2)

阅读更多

DispatchAction类(org.apache.struts.actions.DispatchAction)

 

DispatchAction类是Action类的子类,他提供了有实现的execute方法。

 

我们写的自定义Action类,可以继承DispatchAction类,但不要覆盖execute方法,可以在自定义类中写反回值和参数表都与execute方法相同的方法,可以通过在struts-congfig.xml中为这个action的配置中添加一个参数,来判断调哪一个方法,实际上DispatchAction类就是通过反射机制,通过form中参数调用了自定义Action中的方法,当然这些方法的定义要符合规范,使用继承DispatchAction类的自定义的Action类,也就会共享同一的Action路径。

 

注意:使用继承DispatchAction类的自定义的Action,只会匹配一个action路径,只能共享一个ActionForm,如果加上校验,会产生form表单的参数不一致的情况,会导致校验无法通过。


例:
public class MyAction extends DispatchAction{
 ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ,ActionMapping mapping) throws Exception
        {
                    return mapping.findForward("sucess")                    
        }
}

 

<action path="/add"  type="MyAction" parameter="methodName">
    <!--parameter属性是和form中隐藏域的名字相对应的-->
    <forward name="sucess" path="/sucess.jsp"/>
</action>

<from action="add.do" method="post">
   <input type="hidden" name="methodName" value="add"/>
   <!--
      使用隐藏域为struts传递要调用自定义Action中方法的方法名,是通过与struts-config.xml
      中action标签中的parameter和name属性相对应来获取隐藏域的value。
   -->
   <input type="submit" value="submit"/>
</from>

MappingDispatchAction类(org.apache.struts.actions.MappingDispatchAction)

MappingDispatchAction类是DispatchAction的子类,他和DispatchAction不同点就是可以去匹配多个action路径,这样也就是结决了共用ActoinForm的校验问题了,多个Action的路径使用同一的自定义Action类,这样就不用共享同一个ActionForm,也就不会有校验问题了。


例:
public class MyAction extends MappingDispatchAction{
 ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
        {
                    return mapping.findForward("add")                    
        }
        ActionForward del(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
        {
                    return mapping.findForward("del")                    
        }
}

 

<action path="/add"  type="MyAction" parameter="add">
   <!--parameter属性是指定调用方法的名字-->
   <forward name="add" path="/add.jsp"/>
</action>       
<action path="/del"  type="MyAction" parameter="del">
   <forward name="del" path="/del.jsp"/>
</action>

 

在JSP页面中也不用在使用隐藏域传递参数,直接在form中的action中就可以直接使用xxx.do匹配了。


<form action="add.do" method="post">
   <input type="submit" value="submit"/>
</form>
<form action="del.do" method="post">
   <input type="submit" value="submit"/>
</form>

 

LookupDispatchAction(org.apache.struts.actions.LookupDispatchAction)

 

LookupDispatchAction类也是DispatchAction类的子类,他所实现的功能是解决一个表单多种提交问题的
,他是通过使用资源文件,用submit按钮的value来作为资源文件中的key所对应的值,通过这个值来找到对用的key,在使用这个key来获得指定Map中所对应的值,这个值就是要调用的方法名。

 

submit的value---->MessageResource.properties中的key----->Map中key对相应的值---->action

 

例:
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<form method="post" action="${pageContext.request.contextPath}/lookup/adddel.do">
 <input type="submit" value="<bean:message key="button.add" />" name="methodName">
        <!--注意name="methodName"是和strut-config.xml中action标签中的parameter属性-->
 <input type="submit" value="<bean:message key="button.delete" />" name="methodName">
</form>

MessageResource.properties

button.add=add new user
button.delete=delete user

 

注意:在继承LookupDispatchAction时,要覆盖getKeyMethodMap()方法,并定义Map,向Map中放入指定的键值对。

 

public class AddDelLookupDispatchAction extends LookupDispatchAction
{
 public Map getKeyMethodMap(){


  Map keyMethodMap= new HashMap();
  keyMethodMap.put("button.add", "add");
  keyMethodMap.put("button.delete", "delete");
  return keyMethodMap;


 } 


    public ActionForward add(ActionMapping mapping,ActionForm form,
                   HttpServletRequest request,HttpServletResponse response) throws Exception
    {   
        return mapping.findForward("add");
    }
    public ActionForward delete(ActionMapping mapping,ActionForm form,
                   HttpServletRequest request,HttpServletResponse response) throws Exception
    {
     return mapping.findForward("delete");
    }
}

<action   path="/lookup/adddel"  type="alan.struts.actions.AddDelLookupDispatchAction"
            parameter="methodName">
            <forward name="add" path="/add.jsp"/>
            <forward name="delete" path="/delete.jsp" />
</action>
<message-resources parameter="alan.struts.message.MessageResource" />

 

自定义的Action类的一些规则
1,尽量不要在Action类中使用(静态)成员变量,如果使用要加上同步。
2,尽量使各模块间的耦合性降低,最大限度的针对接口编程。
3,可以将共代码方在覆盖父类的方法中,最后可以用super.xxx(xxx)来调用父类的方法,使用父类的实现,并加上了自定义的功能。

分享到:
评论

相关推荐

    Axis2学习教程-全面学习AXIS

    课程内容包括了Axis2的基础知识讲解,如以多种方式编写和发布WebService、JAX-RPC、JAX-WS的使用、复杂类型的传输、WebService会话管理和Axis2模块等关键概念。此外,教程通过三个实际项目加深理解,涵盖了使用Java ...

    博客系统(struts+hibernate+spring).zip

    这个标签表明这个项目可能是一个学生在毕业设计阶段完成的作品,旨在综合运用所学的Java Web开发知识,提升实际项目开发能力。通常,这样的项目会涵盖基本的CRUD(创建、读取、更新、删除)操作,用户注册与登录,...

    基于springboot的线上辅导班系统源码数据库.doc

    知识点2:SSM 框架 * SSM 框架是 Spring、Struts 和 Hibernate 的整合框架,能够提供一个完整的 Java WEB 开发解决方案。 * SSM 框架提供了一个松耦合的架构,能够使开发者快速构建应用程序。 * SSM 框架的主要特点...

    疯狂Java讲义 java 辅导~~

    - 国内知名的高端IT技术作家,出版过多本技术书籍,如《Spring2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts2权威指南》、《RubyOnRails敏捷开发最佳实践》等。 ### 知识点二:书籍...

    Axis2超级实用教程

    第一部分涵盖了Axis2的基础知识,包括: 1. **以多种方式编写和发布Web服务**:Axis2支持通过POJO(Plain Old Java Object)来创建零配置的Web服务,简化了开发过程。 2. **JAX-RPC和JAX-WS**:这两种Java API允许...

    WebService大讲堂之Axis2系列教程

    整个课程通过详尽的电子书教程、教学视频和在线辅导,确保学员能够全面掌握Axis2的核心技能,并实际操作完成项目。学习过程中,你还将了解到如何利用 Axis2 支持的RESTful服务和Spring框架,以及如何监控SOAP请求和...

    JAVA_JSP_strust2_sql server企业合同管理系统(源码+数据库sql+论文+视频齐全)【JAVA】.zip

    该资源是一个基于JAVA_JSP、Struts2框架和SQL Server数据库的企业合同管理系统,包含了完整的源码、数据库SQL脚本、相关论文以及辅导视频,对于学习和理解企业级应用开发具有很高的参考价值。以下将详细阐述其中涉及...

    Axis2(WebService)经典教程.doc

    课程分为两大部分:第一部分是Axis2基础知识的讲解,涵盖上述各项技术要点;第二部分则通过三个实际项目来加深理解。这三个项目都是个人信息管理系统(PIM),但实现技术有所不同,分别是使用Java Swing、Struts ...

    程序员200G资料大放送(内含百度云链接) 违规请告知删除

    - **Struts2视频教程**:Struts2是一个基于MVC模式的Java Web框架。 - **Hibernate4视频教程**:Hibernate是一个强大的对象-关系映射(ORM)框架,用于简化Java应用程序中的数据访问层。 - **Spring4视频教程**:...

    webservice Axis2教程

    Axis2是目前比较流行的WebService... 本课程通过一套完备的WebService电子书教程+20多讲教学视频+ QQ群中老师辅导的教学服务方式的教学方式, 手把手辅导学员掌握Axis2的核心技术,并一步步带领学员完成这三个项目。

    基于ssh的婴幼儿产品销售系统(项目报告+答辩PPT+源代码+数据库+截图+辅导视频).zip

    《基于SSH的婴幼儿产品销售系统》是一个典型的Java毕业设计项目,它涵盖了软件工程中的多个重要知识点,包括系统架构设计、数据库管理、Web开发等。在这个项目中,SSH框架被广泛运用,SSH指的是Spring、Struts和...

    基于Java Web的高校考试排座系统.pdf

    该系统主要利用了Spring、Struts2和Hibernate框架来设计并实现自动化的考试座位编排功能,从而替代了传统的人工排座方式。系统的设计和实现可以有效避免人工操作中可能出现的错误,减轻教务人员的工作负担,并且提升...

Global site tag (gtag.js) - Google Analytics