在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. 数据库——SQL中EXISTS怎么用1(转)

    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False 方法/步骤   EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返 ...

  2. wireshark教程(一)

    按照国际惯例,从最基本的说起. 抓取报文: 下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包.例如,如果想要在无线网络上抓取流量,点击无线接 ...

  3. (转)windows环境vue+webpack项目搭建

    首先,vue.js是一种前端框架,一般利用vue创建项目是要搭配webpack项目构建工具的,而webpack在执行打包压缩的时候是依赖node.js的环境的,所以,要进行vue项目的开发,我们首先要 ...

  4. Spark编程模型(RDD编程模型)

    Spark编程模型(RDD编程模型) 下图给出了rdd 编程模型,并将下例中用 到的四个算子映射到四种算子类型.spark 程序工作在两个空间中:spark rdd空间和 scala原生数据空间.在原 ...

  5. 部署zookeeper集群

    1.把zookeeper.tar.gz解压之后,移动到/usr目录下 2.首先要给zookeeper之间的每个节点的ssh设置无密码登陆 3.在zookeeper目录下编辑zoo.cfg,复制zoo_ ...

  6. copy src remote_src false表示本地,true在远程

    文件组装模块-assemble assemble主要是将多份配置文件组装为一份配置文件. 参数 必填 默认 选项 说明 Backup 否 No Yes/no 是否创建备份文件,使用时间戳 Delimi ...

  7. mysql 创建新用户并添加权限

    1.添加用户 1.1 添加一个新用户: mysql>grant usage on *.* to " with grant option; 上面这种只支持mysql服务器本地登录. 1. ...

  8. KBEngine 服务器端-loginapp-协议构建、解析执行详细介绍

    宏宏宏 由于 C++ 是静态语言,不能像 js 一样通过函数名字符串来直接执行函数,所以将 messageId 映射到可执行函数的复杂性大大提升:KBEngine 使用了一系列精巧的「宏」来解决这个问 ...

  9. [转] C# mysql 事务回滚

    什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: · 更新客户所购商品的库存信息 · 保存客户付款信息--可能包括 ...

  10. Android XmlPullParser 笔记

    使用XmlPullParser解析xml文件. 要解析的xml文件如下所示. weather.xml <?xml version="1.0" encoding="u ...