• Struts2>result 小强斋


    result

    一、result类型  
         <result type="dispatcher">/r1.jsp</result>  服务器端跳转 跳转到视图
         <result type="redirect">/r2.jsp</result>       客户端跳转 跳转到视图
         <result type="chain">r1</result>                 服务器端跳转 跳转到action
         <result type="redirectAction">r2</result>   客户端跳转 跳转到action

    <package name="default" namespace="/" extends="struts-default">
    
    		<action name="r1">
    			<result type="dispatcher">
    				/r1.jsp
                </result>
    		</action>
    
    		<action name="r2">
    			<result type="redirect">
    				/r2.jsp
                </result>
    		</action>
    
    		<action name="r3">
    			<result type="chain">
    				<param name="actionName">r1</param>
    				<param name="namespace">/</param>
    
    			</result>
    		</action>
    
    		<action name="r4">
    			<result type="redirectAction">
    				<param name="actionName">r2</param>
    				<param name="namespace">/</param>
    			</result>
    		</action>
    
    	</package>

    二、chain跳转时 跳转到别的namespace下面的action

    <action name="r3">
       <result type="chain">
        <param name="actionName">r1</param>   指定要跳转的action
        <param name="namespace">/np1</param>  指定要跳转的action的namespace
       </result>
     </action> 

    三、服务器跳转和客户端跳转的区别
    客户端跳转时用HttPservletResopse对象的sendRedirect函数实现,服务器端跳转是使用RequestDispather对象的forward方法实现的。这两者之间的区别主要体现在三个方面:
    1. 使用服务器端跳转时,客户浏览器的地址栏并不会显示目标地址的URL,而是用客户端跳转时,地址栏当中会显示目标资源的URL;
    2. 服务器端跳转是由客户端发送一个请求,请求一个服务器资源—如JSP和Servlet,这个资源又将请求转到另一个服务器资源,然后再给客户端发送一个响应,也就是说服务器转发全程是没有客户端参与的,都在web container容器内部进行,没有任何服务器和客户端的通信,实际就是服务器内部的跳转服务器端跳转是客户端发送一次请求,服务器端给出一次响应;而客户端跳转的流程则不同。客户端同样是发送一个请求给服务器端资源,这个服务器资源会首先给客户端一个响应,客户端再根据这个响应当中所包含的地址,再次向服务器端发送一个请求,也就是说客户端跳转是两次请求,两次响应

    四、全局result 对本package里面的action都起作用。
        <global-results>
          <result name="mainpage">/main.jsp</result>
       </global-results> 
      如果其他的package也想用这个result的话,必须继承这个包
      <package name="admin" namespace="/admin" extends="user">

    <package name="user" namespace="/user" extends="struts-default">
      <global-results>
       <result name="mainpage">/main.jsp</result>
      </global-results>
    
      <action name="user" class="com.ncepu.struts2.UserAction">
       <result name="success">
        /user_success.jsp
                </result>
       <result name="error">
        /user_error.jsp
                </result>
      </action>
     </package>
    
    
     <package name="admin" namespace="/admin" extends="user">
      <action name="admin" class="com.ncepu.struts2.AdminAction">
       <result name="success">
        /admin_success.jsp
                </result>
      </action>
     </package>
    

    五、动态result(利用 action中的所有属性都会被存在value stack里面)
    在action对应的类中定义一个属性r
    execute方法中

     public String execute() throws Exception {
      if(type == 1) r="/user_success.jsp";
      else if (type == 2) r="/user_error.jsp";
      return "success";
     }  

     配置文件中

    <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
          <result>${r}</result>
        </action> 

    六、传递参数

    一次客户端请求对应一个value stack,所以客户端跳转只能从action Context中获得参数,而不能从value Stack中获得,因为客户端跳转是两次请求,两次响应,客户端跳转的时候才用传递参数  ${}表达式取值。  
    index.jsp   

    <a href="user/user?type=1">传参数</a>

    action配置       

    <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
                   <result type="redirect">/user_success.jsp?t=${type}</result>
    </action>     

    其中type为action中的东西,结果页面可以从action context中取值
    user_success.jsp   

     from valuestack:    <s:property value="t"/>              取不到
     from actioncontext: <s:property value="#parameters.t"/>  能取到


    原因:redirect时候,第二阶段,发出的第二次请求到一个jsp页面,没有action,故value stack为空。而在第一阶段有action,stack context 即action 上下文存着变量t的内容。

    七、ValueStack 和Stack Context(没理解透彻)

    可以通过在页面中添加<s:debug/>标签察看ValueStack 和Stack Context中有哪些具体的内容。

    value stack contents ognl       值栈,值栈里存储的是一些action里的变量,
    stack context                           action上下文,和每一个action对应。

    action上下文是一个map对象,通过#key获得对象内容,在#request又可以得到值栈,
    于是获得action变量内容有三种方式
    1,从值栈中直接获得
         <s:property value="type"/>
         ${type }
    2,从action上下文获得值栈的属性
         <s:property value="#request['type']"/>或者<s:property value="#request.type"/>

      

  • 相关阅读:
    Cookie的作用范围、设置、创建、获取的方法
    2020寒假总结14
    MyBatis中foreach传入参数为数组
    Springmvc接收数组参数
    寒假每日总结十
    2020寒假每日总结
    2020寒假总结八
    2020寒假每日总结七
    2020寒假每日总结四
    2020寒假总结三
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637534.html
Copyright © 2020-2023  润新知