zoukankan      html  css  js  c++  java
  • Struts2中的页面跳转

    一、全局页面的设置
    如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面。
    全局结果页面针对的当前的包中的所有的Action,但是如果局部还有结果页面,会优先局部的。
    设置全局页面的标签是
                <global-results>
                    <result>/demo/suc.jsp</result>
                </global-results>
    局部结果页面
                <result>/demo/suc.jsp</result>

    二、页面跳转类型
    实际上在Struts2框架中,一个完整的结果视图配置文件应该是:
    <action name="Action名称" class="Action类路径" method="方法名">
        <result name="逻辑视图名称" type="结果类型">
            <param name="参数名称">参数值</param>
        </result>
    </action> 
    其中的type就是页面跳转类型。
    Struts2中支持多种页面跳转类型,常见的结果类型去struts-default.xml中查找。
    结果页面使用<result>标签进行配置,包含两个属性:
    name  -- 逻辑视图的名称
    type  -- 跳转的类型,一些常用的类型如下。

    1、dispatcher        
    这种方式是struts2中默认的转发类型,即内部请求转发,类似于forward的方式。用于指定使用JSP作为视图的结果类型。 Action--->JSP

    2、redirect          
    重定向. Action--->JSP或者Action
    用于直接跳转到其他URL的结果类型。
    1)这种结果类型与dispatcher结果类相对,dispatcher结果类型是将请求forword(转发)到指定的JSP资源;而redirect结果类型,则意味着将请求redirect(重定向)到指定的视图资源。
    2)dispatcher与redirect的差别就是重定向和转发的差别:重定向会丢失所以的参数、请求属性--当然也就丢失了Action的出来结果。
    3)使用redirect结果类型的效果是,系统将调用HttpServletResponse的sendRedirect(String)方法来重定向指定视图资源,这种重定向的效果就是重新产生一个请求,因此所有的请求参数、请求属性、Action实例和Action中封装的属性全部丢失。地址栏的URL会发生改变。
    4)配置一个redirect类型结果,可以指定如下两个参数。
    location:改参数指定Action处理完用户请求后跳转的地址。
    parse:改参数指定是否允许在location参数值中使用表达式,改参数默认为true。与前面的类似,通常无需指定parse属性值。
    5)使用这个类型也可以指定跳到一个Action,只是需要添加.action后缀,已达到redirectAction结果类型效果。
    重定向到jsp
    <action name="redirect">
        <result type="redirect">/add.jsp</result>
    </action>
     重定向到action
    <action name="redirect">
        <result type="redirect">addUser.action</result>
    </action> 

    3、redirectAction    
    1)这种方式可以简单的理解成转向到另一个Action。这种配置往往在下面的情况下需要用到:例如,当管理员添加完一个用户后,系统自动跳转到用户列表的界面。
    2)这种结果类型与redirect类型非常相似,一样是重新生成一个全新的请求。但与redirect结果类型区别在于:redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求。
    3)配置一个redirect类型的结果,可以指定如下两个参数。(针对不在同一个配置文件中)
    actionName:该参数指定重定向的Action名。
    namespace:该参数需要指定需要重定向的Action所在命名空间。
     <action name="redirectAction">
       <result type="redirectAction">listAction</result>
    </action>
    该action必须和redirectAction处在同一个package下面。那么如果不在同一个包下,则需进行如下配置:
    <result type="redirectAction">
       <param name="actionName">XXX</param>
       <param name="namespace">YYY</param>
    </result>
    4)使用redirectAction结果类型时,系统将重新生成一个请求,只是改请求的URL不是一个具体的视图资源,而是另一个Action。因此前一个Action处理结果、请求参数、请求属性会全部丢失。

    4、chain             
    多个action之间跳转.从一个Action转发到另一个Action.  Action---Action
    注意: 不能通过 type=dispatcher 的方式转发到一个 Action
    例如:<result name="test" type="chain">/com.chen/testAction.action</result>
    而以下方式错误:<result name="test" type="dispatcher">/com.chen/testAction.action</result>
    chain也用了跳转到另一个Action,与前面的不同的是,他的请求参数和属性都可以保留,比如,系统中的删除功能,回到之前查询的action,要保存页码回到之前删除记录的当前页,用chain就可以做到,几乎就是前面两种的增强版。推荐开发中直接忽略redirect和redirectAction类型,直接用这个chain就好了。

    5、stream            -- 文件下载时候使用的.


    三、关于页面冲突
    当使用一个Action标签完成多个Action配置时,可能会出现Input结果视图冲突的情况。也就是说,在不同逻辑中跳入的input逻辑视图是同一个,此时我们可以在自己的Action方法上加上 @InputConfig(resultName="逻辑视图的名称")的注解然后再在Result中配置即可。
  • 相关阅读:
    Windows 10 PC 安装 Docker CE
    macOS 安装 Docker
    CentOS 安装 Docker CE
    Debian安装Docker
    ubuntu安装Docker
    docker基本概念
    linux docket
    Express框架
    Koa1 框架
    2018年03月刷题学习日记
  • 原文地址:https://www.cnblogs.com/kangsir/p/6653267.html
Copyright © 2011-2022 走看看