在struts2中,初学者因为参数传递的问题往往会出现一些错误。

比如页面跳转的问题,在用户注册中,以一下代码作为案例:

<struts>
<constant name="struts.action.extension" value="action,,"></constant>
<constant name="struts.devMode " value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="user" namespace="/" extends="struts-default">
<action name="*" class="user.TotalAction" method="{1}" >
<result name="success">/WEB-INF/user/userlist.jsp</result>
<result name="modify">/WEB-INF/user/modifyit.jsp</result>
<result name="list" type="redirectAction">userlist</result>
</action>
</package>
</struts>
     public String userlist() throws Exception {
// TODO Auto-generated method stub
UserDAO dao= new UserDAO();
ArrayList<User> list= dao.getUser();
// System.out.println("dao::"+list.size());
ActionContext acx= ActionContext.getContext();
acx.put("USERLIST", list); return "success";
     public String save() throws ClassNotFoundException, SQLException
{
UserDAO dao= new UserDAO();
dao.modifyUser(user);
return "list";
}

笔者如果想要通过save()方法直接将值传递到>/WEB-INF/user/userlist.jsp。如果不借助redirectAction,最笨的方法就是将userlist()方法重写一遍,然后还回success。

但是借助redirectAction,可以直接重定向到新的地址。就是说通过配置一个struts中的rusult方法:加入redirectAction对象,可以在action中通过返回list方法,重新流入<action配置中,重定向,然后再找到userlist方法,以此传递数据。《初次学习,总结如有不足或不对之处请指出》

struts2 中chain、redirect、redirectaction的区别 :

Chain Result:
这个result调用另外的一个action,连接自己的拦截器栈和result。

  • actionName (默认) - 被调用的action的名字
  • namespace - 被调用的action的名称空间. 如果名称空间为空,这默认为当前名称空间
  • method - 用于指定目标action的另一个方法被调用. 如果空,默认为excute方法

Redirect Action Result:

个Result使用ActionMapperFactory提供的ActionMapper来重定位浏览器的URL来调用指定的action和(可选
的)namespace.
这个Result比ServletRedirectResult要好.因为你不需要把URL编码成xwork.xml中配置的ActionMapper提
供的模式. 这就是说你可以在任意点上改变URL模式而不会影响你的应用程序. 因此强烈推荐使用这个Result而不是标准的redirect
result来解决重定位到某个action的情况.

  • ActionName (默认) - 重定位到的action名
  • namespace - action的名称空间. 如果为null,则为当前名称空间

Redirect Result


用{@link HttpServletResponse#sendRedirect(String)
sendRedirect}方法来转到指定的位置. HTTP响应被告知使浏览器直接跳转到指定的位置(产生客户端的一个新请求).
这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失, 不再可用.
这是因为action是建立在单线程模型基础上的.
传递数据的唯一方式就是通过Session或者可以为Ognl表达式的web参数(url?name=value)

  • location (默认) - action执行后跳转的地址.
  • parse - 默认为true. 如果设置为false, location参数不会被当作Ognl表达式解析.

二。当使用type=“redirectAction” 或type=“redirect”提交到一个action并且需要传递一个参数时。这里是有区别的:
a.使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”
Java代码

<action name="Login" class="steven.actions.LoginAction">
<result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>
</action>

b.使用type=“redirect”时,结果应是action配置名+后缀名
Java代码

<action name="Login" class="steven.actions.LoginAction">
<result name="success" type="redirect">User.action?u_id=${loginBean.u_id}</result>
</action>

ps:1 redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
     2 redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。
     3 chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。

 

 

struts2 中redirectAction如何传递参数!的更多相关文章

  1. jsp中四种传递参数的方法

    jsp中四种传递参数的方法如下: 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="i ...

  2. linux中probe函数传递参数的寻找(下)

    点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...

  3. Struts2中通过超链接传参数要注意的问题

    写到分页的功能,在传递页码pageNo的时候遇到了参数接收不正确的问题,我本来在action中是定义了一个pageNo字符串参数和一个Page类参数,Page是一个封装了页面要显示的数据集合和页面信息 ...

  4. (转)JSP中四种传递参数的方法:

    1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="index.jsp"?a= ...

  5. C++中三种传递参数方法的效率分析

    众所周知,在C++中有三种参数传递的方式: 按值传递(pass by value) #include <iostream> using namespace std; void swap(i ...

  6. Struts2中通过Ajax传递json数据

    1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...

  7. win32程序通过LPCREATESTRUCT中的lpCreateParams传递参数给窗口过程函数

    win32窗口程序中如果需要给窗口过程函数传递自定义参数,可以通过LPCREATESTRUCT结构体中的lpCreateParams进行传递. 创建窗口实例函数: m_hWnd = CreateWin ...

  8. struts2 redirect 配置动态传递参数

    <action name="actionName" class="com.towerking.TestAction" method="execu ...

  9. vue中使用props传递参数

    通常,父组件的模板中包含子组件,父组件要正向地向子组件传递数据或参数,子组件收到后根据参数的不同来渲染不同的内容,或者执行操作. 这个正向传递数据的过程是通过props来实现的. 在组件中,子组件使用 ...

随机推荐

  1. JavaScrip——简单练习(抓错误信息,for循环,日期)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 关于最新的Vuforia-unity3d-samples2-8-13

    今天用了一下最新的Vuforia for unity3d的样例2-813版本号.导入我的unity3d之后.发现ARCamera的检视面板下非常多熟悉的元素都不见了,根本没法改动标志,如图所看到的. ...

  3. C语言中带参数的宏

    带参数的宏定义有如下的格式: [#define 指令----带参数的宏] #define 标识符(x1,x2,……,xn) 其中  x1,x2,……xn是标志符(宏的参数) 注意:在宏的名字和括号之间 ...

  4. C的内存四大区

    前提 看视频得来的内容,只知道不止4个区,但主要是这4个区. 四区 静态区 用于存放所有的全局变量和静态变量. ; //静态区 int main(){ ; //静态区 ; } 代码区 就是存放程序的执 ...

  5. ubuntu 12.04 LTS server 中文乱码【转】

    ubuntu 12.04 LTS server 中文乱码 最近装了一台ubuntu 12.04 server装完后是没有桌面的,后来又手动安装了桌面,但进行后发现桌面是乱码,应该是缺少字体在googl ...

  6. (转)x264源码分析(1):main、parse、encode、x264_encoder_open函数代码分析

    转自:http://nkwavelet.blog.163.com/blog/static/2277560382013103010312144/ x264版本:   x264-snapshot-2014 ...

  7. CentOS查看本机公网IP命令

    icanhazip.com 使你在任何地方知道你的公网IP地址 icanhazip.com是一个网址,你在浏览器中输入这个网址,你就能得到你的公网IP地址了. 我在Linux下一般使用curl ica ...

  8. port被占用的处理方法

    開始--执行--cmd 进入命令提示符 输入netstat -ano 就可以看到全部连接的PID 之后在任务管理器中找到这个PID所相应的程序假设任务管理器中没有PID这一项,能够在任务管理器中选&q ...

  9. 【MongoDB】数组长度查询

    db.groupedInfo.count({'surveyInfo.surveyAndUserID.0':{$exists:1}})

  10. 什么是mysql的元数据呢?

    需求描述: 什么是mysql的元数据?metadata? 概念解释: 简单来说:任何描述数据库的数据就是数据库的元数据库(与数据库中存在的内容相对) 比如,用于描述一个冰箱是如何构成,怎么使用的就是冰 ...