`

ActionForward 动态转发(Redirect和Forward是两种不同的机制.)

阅读更多

我的写法:

  ActionForward oldForward = mapping.findForward("success");
  String path = oldForward.getPath();
  path += "?keyId="+tmo.getRecId()+"&actId="+actId;
  System.out.println("-----------------path = "+path);
  
  ActionForward newForward = new ActionForward();
  newForward.setPath(path);
  return newForward;
  
  //return mapping.findForward("success");

注:此处必须new一个ActionForward ,否则报错(Configuration is frozen)。

 

参考文章:http://hain.bokee.com/5244557.html  

ActionForward 动态转发(Redirect和Forward是两种不同的机制.)                           

ActionForward的作用就是从一个页面链接到另一个页面,最简单的应用就是mapping.findForward("success")。

属性:name-逻辑名称;path-URL;redirect-当设置为true是,重定向,默认为false;className(可选)-默认为ActionForward。

一般的调用过程:当ActionServlet调用Action时,Action 把Mapping的findForward()传递给它。findForward()先在局部转发列表中寻找key,如果没找到,再从全局转发列表中寻找。如果都没找到,此方法将返回null,浏览器报错。

在<html:link>标记中的使用:
在配置文件中定义一个forward:
 <forward name="article" path="/do/article?dispatch=view"/>

<html:link>中:
 <html:link forward="article" paramName="articleForm" paramProperty="articleKey" paramId="key">
   News from the edge
 </html:link>

运行结果:
 <a href="http://localhost/artimus/do/article?dispatch=view&key=17">News from the edge</a>
注意这边,如果已经存在一个参数,标签会很聪明的帮你添加一个连接符号,之后再添加参数。
添加自己要转发的路径:
 public ActionForward execute( ActionMapping mapping,ActionForm form, HttpServletRequest request,
                                              HttpServletResponse response ) throws Exception{
        ActionForward forward = new ActionForward();
        String loginid = ((LoginForm)form).getLoginid();
        String password = ((LoginForm)form).getPassword();
        if(...){
             ......  // business code
            forward.setPath("welcome.jsp");
        }else{
            ActionMessages errors = new ActionMessages();
            .......
            forward = mapping.findForward("Failure");
        }
        return forward;
    }
在Action 类中添加参数:
 ActionForward forward = mapping.findForward("article");
 StringBuffer path = new StringBuffer(forward.getPath());
 boolean isQuery = (path.indexOf("?")>=0);
 if (isQuery)
 path.append("&amp;dispatch=view");
 else
 path.append("?dispatch=view");
 return new ActionForward(path.toString());
如果ActionForward 没有设置为重定向,新的参数将被合并到当前request的参数中。如果新的参数的名称和原参数名称相同,在新的转发期内将使用新的参数值。
分享到:
评论

相关推荐

    js宝方法方法法笑嘻嘻典

    3. **全局与局部转发**:ActionForward分为全局和局部两种类型。局部转发在struts-config.xml中定义,用于特定Action的转发;全局转发是全局可访问的,适用于多个Action共享的转发目标。当找不到局部转发时,会尝试...

    模仿struts2转发

    在Struts2中,转发是一种重要的请求处理机制,它允许应用将一个请求重定向到另一个Action,使得多个Action之间可以协同工作。下面我们将详细讨论如何模仿Struts2的转发功能,以及这一过程中涉及的关键概念和技术。 ...

    一个基于struts的重定向和转发实例

    在这个基于Struts的重定向和转发实例中,我们将探讨这两个关键概念在Web应用程序中的应用。 首先,让我们理解什么是重定向和转发: 1. **重定向(Redirect)**:在HTTP响应中,服务器向客户端发送一个302状态码,...

    action之间的跳转

    这种机制可以分为两种类型:chain 和 redirect-action。 1. Chain 类型 当 type 为 chain 时,说明是 action 链,运行完第一个 action java 文件接着会运行第二个 action JAVA 文件,相当于 forward(客户端的 url...

    struts1.3页面跳转问题

    首先,页面跳转在Struts1.3中有两种主要方式:请求转发(Request Forwarding)和重定向(Redirecting)。请求转发是服务器内部操作,实际URL不会改变;而重定向则是让浏览器发起新的HTTP请求,URL会显示为新的地址。...

    传智播客_result的各种视图转发类型及全局

    其中,"转发"和"重定向"是两种常见的视图处理方式。 1. **视图转发(Forward)**: 视图转发是在服务器端完成的,它不会改变浏览器的URL。当Action执行完成后,请求会继续在同一个请求上下文中,通过Servlet容器...

    J2EE非常基础的笔试题(附答案).doc

    Forward和Redirect是两个不同的请求响应机制。Forward是服务器端的内部跳转,客户端不知道跳转的细节,而Redirect是客户端的跳转,客户端会收到跳转的响应信息。Forward一次请求,Redirect则需要两次请求。 五、Web...

    Java Web中的页面跳转.pdf

    在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...

    java面试题

    20. forward 和redirect的区别 13 21. EJB与JAVA BEAN的区别? 13 22. Static Nested Class 和 Inner Class的不同。 13 23. JSP中动态INCLUDE与静态INCLUDE的区别? 14 24. List, Set, Map区别 14 25. 集合类都有...

    java面试题(20211007014846).pdf

    9. **XML解析**:Java支持SAX(Simple API for XML)和DOM(Document Object Model)两种解析方式。SAX解析器逐行读取,内存占用少,适合大文件;DOM一次性加载整个XML到内存,方便操作,适合小文件。 10. **数据库...

    struts2中常用Result类型(type)的用法和出现的问题

    在使用 chain 时,多个 action 之间的数据传递可以通过两种方式实现: 1. 由于 chain 中的 action 属于同一个 HTTP 请求,共享一个 ActionContext,故可以在上下文中获取。在页面上可以直接使用。 例如: ...

    J2EE面试题(1)

    在Servlet中,`forward`与`redirect`是两种不同的页面跳转方式: - `forward`是一种服务器内部转发机制,客户端不会收到新的响应,URL地址栏也不会变化,因此不会增加新的请求记录。 - `redirect`是一种重定向机制,...

    struts1 练习代码

    9. **预定义结果类型(Forward和Redirect)**:Struts1提供了两种结果类型——Forward和Redirect。Forward是服务器端跳转,而Redirect是客户端跳转,两者在处理POST请求和防止重复提交时有不同的应用场景。 10. **...

    J2EE复习冲刺精简版1

    Struts1和Struts2是两种不同的版本,它们都是Apache软件基金会的开源项目,用于构建基于MVC模式的Web应用。 1. **Struts1**: 使用ActionServlet作为核心控制器,ActionForm存储请求参数,Action处理业务逻辑并返回...

    struts2中result类型之redirectAction

    与传统的转发(forward)不同,转发是服务器内部的操作,而重定向则是客户端的行为。这意味着浏览器会发起一个新的HTTP请求到指定的URL,这样可以避免一些问题,如请求参数的可见性、防止表单重复提交等。 **...

    Action名称的搜索顺序

    3. **默认Action**:如果上述两种方式都无法找到匹配的Action,则会使用包(Package)中定义的默认Action(如果存在的话)。默认Action可以通过在包配置中设置`default-action-ref`属性来指定。 #### Action配置的...

    DispatchAction、LookupDispatchAction、SwitchAction的应用

    假设有一个编辑文章的表单,其中包含“保存”和“取消”两个按钮,这两个按钮都使用相同的名称 `action`: ```xml &lt;action path="/editArticle" type="com.****.EditArticleAction" name="ArticleForm" scope=...

    Structs多模块的配置方法.doc

    **三、两种方法的比较** 多模块方法更推荐,因为它允许每个模块拥有独立的RequestProcessor,这在处理模块特定的请求处理逻辑时非常有用。而多配置文件方法相对简单,只需在web.xml中添加配置文件即可,但不支持每...

Global site tag (gtag.js) - Google Analytics