`

AppFuse1.8中BaseAction的一些主要方法说明

阅读更多
功能:

通过请求的参数来决定该执行哪一个方法,而不像一般的Action,从Execute方法执行。在一个窗体中包括两个以上同名的按钮时,由Struts来决定具体执行那个按钮操作,减少了Action类,增加了请求处理的灵活性

AppFuse1.7与AppFuse1.8的BaseAction区别

AppFuse1.7是继承LookupDispatchAction, 需要复写 getKeyMethodMap()方法

具体可参考http://blog.csdn.net/GOALSTAR/archive/2005/12/05/543802.aspx

AppFuse1.8是继承DispatchAction

AppFuse1.8中BaseAction的主要方法



1.getBean()方法,得到Bean的对象

public Object getBean (String name) {

     if (ctx == null) {

            ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());

     }

      return ctx.getBean(name);

}



2.convert() 对象转换方法,用来实现POJOs à ActionForm & ActionForm à POJOs 的转换

// 调用ConvertUtil#convert(java.lang.Object)
protected Object convert (Object o) throws Exception {

              return ConvertUtil.convert(o);

}



3.execute()的方法

public ActionForward execute (ActionMapping mapping, ActionForm form,

                          HttpServletRequest request, HttpServletResponse response)

    throws Exception {

       

        if (isCancelled(request)) {

            try {

                getMethod("cancel");

                return dispatchMethod(mapping, form, request, response, "cancel");

            } catch (NoSuchMethodException n) {

                log.warn("No 'cancel' method found, returning null");

                return cancelled(mapping, form, request, response);

            }

        }



        // Check to see if methodName indicated by request parameter

        String actionMethod = getActionMethodWithMapping(request, mapping);

       

        if (actionMethod != null) {

            return dispatchMethod(mapping, form, request, response, actionMethod);

        } else {

            String[] rules = {"edit", "save", "search", "view"};

            for (int i = 0; i < rules.length; i++) {

                // apply the rules for automatically appending the method name

                if (request.getServletPath().indexOf(rules[i]) > -1) {

                    return dispatchMethod(mapping, form, request, response, rules[i]);

                }

            }

        }

       

        return super.execute(mapping, form, request, response);

    }


在AppFuse1.8中BaseAction是继承DispatchAction , 使用struts时我们经常会用到DispatchAction.有了这个类,我们不需要针对每一个Action都要写一个特定的类,而是可以把一些相关的方法放到一个类中.
DispatchActon中使用了reflection来根据你传入的method参数的值来获取相应的参数来处理你的请求.正如他的方法 -- 他根据你传入的请求参数,用不同的方法来处理你的请求.

   只要看看struts中DispatchAction(以下简写做DA)的源文件你就会发现,它有一个dispatchMethod方法,接受5个参数.其中4个就是我们通常的struts action里的(mapping,request,response,form),还有一个参数就是指定方法的参数的名字.



Ø Struts-config.xml中的配置

<action path="/editUser" ype="smarthings.webapp.action.UserAction"  name="userForm" scope="request"

input="list" roles="admin" parameter="method" unknown="false" validate="false" >

<forward name="viewUsers" path="/editUser.html?method=Search( edit / save / delete )"/>

</action>



然后在Action中具体的实现Action都是继承了BaseAction的.比如

  public final class PeopleAction extends BaseAction {

    //具体的操作方法search

    public ActionForward search(ActionMapping mapping, ActionForm form,

                                HttpServletRequest request,

                                HttpServletResponse response)

         throws Exception {

        //具体的操作方法cancel

    public ActionForward cancel(ActionMapping mapping, ActionForm form,

                                HttpServletRequest request,

                                HttpServletResponse response)

    throws Exception {………}

//具体的操作方法delete

    public ActionForward delete(ActionMapping mapping, ActionForm form,

                                HttpServletRequest request,

                                HttpServletResponse response)

         throws Exception {………}



//具体的操作方法Edit

   public ActionForward edit(ActionMapping mapping, ActionForm form,

                                HttpServletRequest request,

                                HttpServletResponse response)

         throws Exception {……}

………

………






分享到:
评论

相关推荐

    appfuse

    使用appfuse2.0,下载过来的实例源码,没有jar包

    appfuse开发框架(myapp)使用说明文档

    对用appfuse 做快速开发进行说明 本框架推荐使用的Tomcat版本为5.0.*,JDK使用1.4。若使用JDK 1.5+,则要将Tomcat安装目录下的common\endorsed 里面两个JAR(xercesImpl.jar,xmlParserAPIs.jar)去掉。Ps:...

    AppFuse入门文档(AppFuse与SpringMVC+mybatis整合)

    本文档详细描述了AppFuse与SpringMVC+mybatis整合的过程,只要你懂一些基本的eclipse操作和基本的maven命令,就可以在三分钟之内迅速的搭建出一个AppFuse的架构

    Appfuse1.9至2.0.2

    主要是自己从网络上搜集的一些关于appfuse1.8.2-2.0.2的一些相关资料,间或有点自己试验的记录,还有点maven和quartz的东东,之前我主要是用1.8.2构建项目,感觉还不错,希望对想学习appfuse的人有些帮助.

    AppFuse2.1所需包

    AppFuse2.1所需包,主要包括Spring MVC+Hibernate4 还有一些其它包!

    appfuse 配置说明 doc 格式

    appfuse 配置说明 doc 格式 框架 有截图

    AppFuse

    本文以一个 J2EE 开发者的角度,借助一个简单的应用示例,在融合了个人经验的基础上介绍了如何用 AppFuse 一步步地构建 J2EE 项目。通过阅读本文,读者不仅能够学会用 AppFuse 进行开发,而且能够充分体会到 AppFuse...

    可直接使用的appfuse项目

    AppFuse是一个集成了众多当前最流行开源框架与工具(包括Hibernate、ibatis、Struts、Spring、DBUnit、Maven、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit、JSTL等(现在还有lucene的,无敌了))于一身的...

    APPFUSE工具研究.doc

    Appfuse是一个开源的工程应用,它集成了现在最流行的开发框架到该应用中,使用Maven可以很方便的开发和部署因为。也可以集成到现在流行的开源开发工具如eclipse,idea等。现在让我们简单的看看APPFUSE开发应用的简单...

    appfuse1.4-architecture

    06年时的appfuse,学习SSH架构的经典入门框架。相对比较老的资料,可以欣赏一下当时的架构,向牛人致敬

    appfuse使用手册

    代码自动生成工具appfuse的中文使用手册

    appfuse苦学二天的步骤说明文件

    详细的说明了appfuse的下载、安装、配置、创建项目、编译、部署、运行、生成源码的全过程。如果有问题 qq: 52288572

    appfuse新手上路

    新手使用appfuse2.0,启动步骤和配置过程

    Appfuse教程Appfuse开发.pdf

    用 户管理、根据不同的用户可以展现不同的菜单,可以自动生成40%-60%左右的代码,自带了默认的一些在CSS中设定的样式,使用这些样式能很快的改变整 个系统的外观,还有自动化测试的功能。  它最大的价值就是为我们...

    appfuse 学习笔记

    Appfuse 一个开放源码的项目和应用程序,帮助我们快速而高效的地开发。

    建立项目原型骨架的步骤(最新版本appfuse)appfuse2.1.0-M2

    建立项目原型骨架的步骤(最新版本appfuse)appfuse2.1.0-M2 spring3.0 hibernte3.3 struts2.1.8

    Appfuse框架解析

    Appfuse框架解析,包括登陆验证,执行顺序,加载策略等。

    AppFuse项目研究

    Appfuse是由Matt Raible开发的一个指导性的入门级J2EE框架,它对如何集成流行的Spring、Hibernate、iBatis、struts、Xdoclet、junit 等基础框架给出了示范。提供了对Taperstry和JSF的支持

    基于AppFuse框架的B2C电子商务系统研究与实现

    基于AppFuse框架的B2C电子商务系统研究与实现

    appfuse学习笔记(一)安装部署

    NULL 博文链接:https://savagegarden.iteye.com/blog/427169

Global site tag (gtag.js) - Google Analytics