• Struts2中Action之ResultType


    我们在struts-defalut.xml文件中可以看到如下图所示:

    这些类型是配置文件所带的。接下来我们主要讲解我标注出来的这个,其他的我就不做详解了,有兴趣的可以去试试。

    web.xml文件我在这里就不配置了。直接从action开始

    1.0当type取值为chain时:

       chain:转发到action

      创建LoginAction继承ActionSupport类定义方法

    package cn.struts2.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    import java.util.Map;
    
    /**
     * Created by accp on 2017/3/1.
     */
    public class LoginAction extends ActionSupport {
        public String list(){
            System.out.println("====进入==LoginAction====list============");
            return "list";
        }
    
        public String add(){
            System.out.println("====进入====LoginAction==add============");
            return "add";
        }
    }

    创建ShoppingAction

    package cn.struts2.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import org.apache.struts2.ServletActionContext;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * Created by accp on 2017/3/2.
     */
    public class ShoppingAction extends ActionSupport {
    
        public String list(){
            System.out.println("========进入ShoppingAction=====list============");
            HttpServletRequest request = ServletActionContext.getRequest();
            String uname = (String) request.getAttribute("uname");
            System.out.println(uname);
            return "list";
        }
    
        public String add(){
            System.out.println("======进入ShoppingAction=======add============");
            return "add";
        }
    }

    创建两个jsp页面,填写上不同的内容。

    最主要的接下来配置struts.xml

    .......
          <!--转发到action-->
            <action name="loginAdd" class="cn.struts2.action.LoginAction" method="add">
               <result name="add" type="chain">
                   <param name="actionName">shoppingList</param>
                   <param name="namespace">/</param>
    
               </result>
            </action>
            <action name="shoppingList" class="cn.struts2.action.ShoppingAction" method="list">
                <result name="list">/success.jsp</result>
                <result name="success"></result>
            </action>

    <param name="actionName">loginList</param>:指向的是你要转向的action的逻辑名称,要特别注意!!!!!!!

    actionName:系统定义。在struts-defalut.xml------>result-type----->ActionResultType

    运行效果:

    因为在一次转发内携带数据是有效的,我们就可以得到上图的结果。

    1.1type取值为dispatcher

     dispatcher:转发到页面(以LoginAction类为例)

    <!--转发到页面-->
            <action name="loginAction2" class="cn.struts2.action.LoginAction" method="add">
                <result name="add" type="dispatcher">
                    /success.jsp
                </result>
            </action>

    直接指向页面即可,不需要再返回action通过别的方法。

    1.2type取值为redirectAction

     redirectAction:重定向action

       struts.xml配置:

    <!--重定向action-->
            <action name="loginAction3" class="cn.struts2.action.LoginAction" method="add">
                <result name="add" type="redirectAction">
                   <param name="actionName">shoppingList</param>
                    <param name="namespace">/</param>
                </result>
            </action>
            <action name="shoppingList" class="cn.struts2.action.ShoppingAction" method="list">
                <result name="list">/index.jsp</result>
            </action>

    上述方法不变运行,效果图如下:

    从两张图中我们可以很清晰的看出,地址栏发生了很大的变化,再看结果,由于我们把数据方法的是request作用域中,在一次转发内

    可以拿到数据,但是重定向相当于重新请求,携带的数据消失,得到null。

    1.3type取值为redirect

    redirect:重定向到页面

     <!--重定向到页面-->
            <action name="loginAction4" class="cn.struts2.action.ShoppingAction" method="list">
                <result name="list" type="redirect">
                    /success.jsp
                </result>
            </action>

    重定向地址栏都会发生变化,在使用的时候要根据自己的需求选择合适的类型。

    1.4type取值为plainText

         plainText:纯文本

       struts.xml:

     <!--plainText-->
            <action name="loginAction5" class="cn.struts2.action.LoginAction" method="add">
                <result name="add" type="plainText">
                    <param name="charSet">UTF-8</param>
                    <param name="location">/index.jsp</param>
                </result>
            </action>
    复制代码

    <param name="charSet">UTF-8</param>:

    location:指向那个页面。

    效果图:

    得到的是源代码。很神奇是吧,你可以试试其他的类型。

    就到这里吧............

  • 相关阅读:
    linux解压缩各种命令
    memset
    STRUCT_OFFSET( s, m )宏
    请问这个宏是什么意思 #define NOTUSED(v) ((void) v)?
    typedef特殊用法:typedef void* (*fun)(void*)
    localtime、localtime_s、localtime_r的使用
    Git使用(一)
    【转】linux gcc _attribute__((weak)) 简介及作用
    我的技术博客
    .net 4.0(2.0)“检测到有潜在危险的 Request.Form 值”的解决方法
  • 原文地址:https://www.cnblogs.com/chuangege/p/6497481.html
Copyright © 2020-2023  润新知