我的写法:
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> |
注意这边,如果已经存在一个参数,标签会很聪明的帮你添加一个连接符号,之后再添加参数。
添加自己要转发的路径: 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("&dispatch=view"); else path.append("?dispatch=view"); return new ActionForward(path.toString()); |
如果ActionForward 没有设置为重定向,新的参数将被合并到当前request的参数中。如果新的参数的名称和原参数名称相同,在新的转发期内将使用新的参数值。
分享到:
相关推荐
3. **全局与局部转发**:ActionForward分为全局和局部两种类型。局部转发在struts-config.xml中定义,用于特定Action的转发;全局转发是全局可访问的,适用于多个Action共享的转发目标。当找不到局部转发时,会尝试...
在Struts2中,转发是一种重要的请求处理机制,它允许应用将一个请求重定向到另一个Action,使得多个Action之间可以协同工作。下面我们将详细讨论如何模仿Struts2的转发功能,以及这一过程中涉及的关键概念和技术。 ...
在这个基于Struts的重定向和转发实例中,我们将探讨这两个关键概念在Web应用程序中的应用。 首先,让我们理解什么是重定向和转发: 1. **重定向(Redirect)**:在HTTP响应中,服务器向客户端发送一个302状态码,...
这种机制可以分为两种类型:chain 和 redirect-action。 1. Chain 类型 当 type 为 chain 时,说明是 action 链,运行完第一个 action java 文件接着会运行第二个 action JAVA 文件,相当于 forward(客户端的 url...
首先,页面跳转在Struts1.3中有两种主要方式:请求转发(Request Forwarding)和重定向(Redirecting)。请求转发是服务器内部操作,实际URL不会改变;而重定向则是让浏览器发起新的HTTP请求,URL会显示为新的地址。...
其中,"转发"和"重定向"是两种常见的视图处理方式。 1. **视图转发(Forward)**: 视图转发是在服务器端完成的,它不会改变浏览器的URL。当Action执行完成后,请求会继续在同一个请求上下文中,通过Servlet容器...
Forward和Redirect是两个不同的请求响应机制。Forward是服务器端的内部跳转,客户端不知道跳转的细节,而Redirect是客户端的跳转,客户端会收到跳转的响应信息。Forward一次请求,Redirect则需要两次请求。 五、Web...
在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...
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. 集合类都有...
9. **XML解析**:Java支持SAX(Simple API for XML)和DOM(Document Object Model)两种解析方式。SAX解析器逐行读取,内存占用少,适合大文件;DOM一次性加载整个XML到内存,方便操作,适合小文件。 10. **数据库...
在使用 chain 时,多个 action 之间的数据传递可以通过两种方式实现: 1. 由于 chain 中的 action 属于同一个 HTTP 请求,共享一个 ActionContext,故可以在上下文中获取。在页面上可以直接使用。 例如: ...
在Servlet中,`forward`与`redirect`是两种不同的页面跳转方式: - `forward`是一种服务器内部转发机制,客户端不会收到新的响应,URL地址栏也不会变化,因此不会增加新的请求记录。 - `redirect`是一种重定向机制,...
9. **预定义结果类型(Forward和Redirect)**:Struts1提供了两种结果类型——Forward和Redirect。Forward是服务器端跳转,而Redirect是客户端跳转,两者在处理POST请求和防止重复提交时有不同的应用场景。 10. **...
Struts1和Struts2是两种不同的版本,它们都是Apache软件基金会的开源项目,用于构建基于MVC模式的Web应用。 1. **Struts1**: 使用ActionServlet作为核心控制器,ActionForm存储请求参数,Action处理业务逻辑并返回...
与传统的转发(forward)不同,转发是服务器内部的操作,而重定向则是客户端的行为。这意味着浏览器会发起一个新的HTTP请求到指定的URL,这样可以避免一些问题,如请求参数的可见性、防止表单重复提交等。 **...
3. **默认Action**:如果上述两种方式都无法找到匹配的Action,则会使用包(Package)中定义的默认Action(如果存在的话)。默认Action可以通过在包配置中设置`default-action-ref`属性来指定。 #### Action配置的...
假设有一个编辑文章的表单,其中包含“保存”和“取消”两个按钮,这两个按钮都使用相同的名称 `action`: ```xml <action path="/editArticle" type="com.****.EditArticleAction" name="ArticleForm" scope=...
**三、两种方法的比较** 多模块方法更推荐,因为它允许每个模块拥有独立的RequestProcessor,这在处理模块特定的请求处理逻辑时非常有用。而多配置文件方法相对简单,只需在web.xml中添加配置文件即可,但不支持每...