• struts2结果(Result)


    一、结果(result)类型

    result的type属性默认为dispatcher,其他常见的属性有redirectchain edirectAction

    <action name="a1">
                 <result type="dispatcher">
                     /a1.jsp
                 </result>
             </action>
             <action name="a2">
                 <result type="redirect">
                     /a2.jsp
                 </result>
             </action>
             <action name="a3">
                 <result type="chain">
                     a1
                 </result>
             </action>
             <action name="a4">
                 <result type="chain">
                     <param name="actionName">a1</param>
                     <param name="namespace">/</param>
                 </result>
             </action>
             <action name="a5">
                 <result type="redirectAction">
                     a1
                 </result>
             </action>

    dispatcher就是forward到一个jsp页面

    redirect就是跳转到一个jsp页面

    chain就是forward到一个action,跳转到另外一个package用第四种方式

    redirectAction就是跳转到一个action

    二、全局结果集

    在配置struts2.xml时有时候会遇到一个问题即多个action的result是相同的这时候就没有必要为每个action配一个result,只要配置一个global result即可:

    <package name="index" namespace="/" extends="struts-default">
             <global-results>
                 <result name="msg">/msg.jsp</result>
             </global-results>
         </package>
         <package name="user" namespace="/user" extends="index">
             
         </package>

    这样当index包和user包下的action返回msg的时候就会forward到/msg.jsp。(extends="index"从index包继承)

    三、动态结果集

    在struts.xml中配置:

    <action name="login" class="cn.orlion.user.UserAction" method="login">
                 <result>
                     ${r}
                 </result>
             </action>

    UserAction:

    package cn.orlion.user;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport{
        
        private int type;
        
        private String r;
        
        public String login(){
            
            if (1 == type) r = "/a1.jsp";
            else if (2 == type) r = "/a2.jsp";
            return "success";
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        public String getR() {
            return r;
        }
    
        public void setR(String r) {
            this.r = r;
        }
        
    }

    这样当访问http://localhost:8080/Struts2Demo/user/login.action?type=1时就会看到a1.jsp

    访问...?type=2时就会看到a2.jsp了

    struts.xml中${r} 实际是从Value Stack中取出r的值

    四、结果集传参数

    当访问.../login.jsp?uid=test时通过< s:property value="uid" />是取不到的因为uid是个参数不会放到Value Stack中而是放到Stack Context中,可以通过<s:property value="#parameters.uid" />娶到。

    当访问一个action(在这个action里赋值给了uid)时,这个action的结果:login.jsp(即forward到 /login.jsp)可以用<s:property value="uid" />取到值,这是因为forward可以从Value Stack中取到。

  • 相关阅读:
    Conda 中安装 Keras
    Clean Docker :
    Conservation Vs Non-conservation Forms of conservation Equations
    C语言之预处理命令
    const指针用法总结
    C语言中的小启发(陆续更新。。。)
    左值与右值
    计算的次序
    C语言中的符号重载
    C语言之switch语句详解
  • 原文地址:https://www.cnblogs.com/orlion/p/5020004.html
Copyright © 2020-2023  润新知