zoukankan      html  css  js  c++  java
  • Struts2学习---result结果集

    这一章节主要介绍如何配置结果集,分为以下几个知识点:

    • 结果集类型(result type)
    • 全局结果集(global types)
    • 动态结果集(dynamic type)
    • 带有参数的结果集(type with params)

    result type:

    结果集类型一共有十一种:

    1. dispatcher
    2. redirect
    3. chain
    4. redirectAction
    5. freemarker
    6. httpheader
    7. stream
    8. velocity
    9. xslt
    10. plaintext
    11. tiles
      最常用的是前两种:一个是请求转发,一个是请求重定向。
      还会用到的就是freemarker(模板),和stream(用于下载)。

    我们的配置文件默认情况下都是dispatcher,请求转发,将struts得到的请求通过服务器转到相应的页面。
    这里的requet是一次请求,二redirect是两次请求。(这个和javaweb里面的dispatcher和redirect相同这里就不做太多解释)。

    chain是转向一个action,也就是将请求转到同一个包下的action(转到不同包下的action后面介绍)。

    redirectAction是重定向到另一个Action,状态和redirect相同,作用和chain相同。
    本文只介绍以上类型。接下来我们来看看具体是怎么配置的(dispatcher和redirect省略)。

     <action name="page1" class="">
              <result type="dispatcher">/xxx.jsp</result>
     </action>
     
     <action name="page2" class="">
                <result type="redirect">/xxx.jsp</result>
     </action>
     
     <action name="page3" class="">
                <result type="chain">page1</result>
     </action>
     
     <action name="page3" class="">
                <result type="redirectAction">page1</result>
     </action>
    
    

    配置很简单,接下来我们来看看不同包下chain和redirectAction怎么配置:

     <package name="public" extends="struts-default" namespace="/">
     <action name="page" class="">
    	 <result type="chain">
    		 <param name="actionName">action1</param>
    		 <param name="namespace">/secure</param>
    	 </result>  
     </action>
     </package>
     
     <package name="secure" extends="struts-default" namespace="/secure">
    	 <action name="action1" class="">
    		 <result>xx.jsp</result>  
    	 </action>
     </package>
    

    只要在result里面定义想要调用的namespace和actionName参数,struts就会根据你的指定调用对应的action,上面的是chain的演示配置,redirectAction和它配置相同只要将type改为redirectAction就可以了。

    全局结果集:

    全局结果集,顾名思义就是全局的,就像java代码里面的全局变量一样,可以在整个程序里面被调用。
    当我们在一个程序里面想返回一个错误页面的时候,总不能每个action里面都定义一个result,然后反悔error.jsp吧。
    所以这个时候我们就可以用到全局结果集了(全局结果集在一个包里面“全局”)。
    具体这样定义:

    <global—results>
    	<result name="errorpage">/error.jsp</result>
    </global—results>
    

    这样配置过后,当前包的action里就可以返回errorpage达到返回作物页面的目的,省去了我们多次配置。

    当其他包的action也想要获得这个全局结果集的时候只需要在它package extends属性里面继承含有全局属性的包就行了。

    动态结果集

    动态结果集、
    struts.xml:

    <action name="" class="xx.xxAction">
    	<result>${r}</result>
    </action>
    
    public class UserAction extends ActionSupport {
    	private int type;
    	
    	private String r;
    
    	public String getR() {
    		return r;
    	}
    
    	public void setR(String r) {
    		this.r = r;
    	}
    
    	public int getType() {
    		return type;
    	}
    
    	public void setType(int type) {
    		this.type = type;
    	}
    	
    	@Override
    	public String execute() throws Exception {
    		if(type == 1) r="/user_success.jsp";
    		else if (type == 2) r="/user_error.jsp";
    		return "success";
    	}
    }
    
    

    动态结果集的原理:当我们发送请求的时候,里面包含一个请求参数,我们在execute中根据参数将type我们将r赋予不同的值(页面字符串),并放入值栈中保存。
    result里面包含一个ognl表达式,用来取得值栈里面r的数据。
    这样就完成了动态的结果集。

    带有参数的结果集

    当客户端发送了一个请求,这个请求含有参数,我们将这个请求重定向到其他页面,那么我们怎么将这个参数继续带到其他页面呢?
    请求带了一个名为type的参数

    <result type="redirect">/user_success.jsp?t=${type}</result>
    

    在jsp我们可以这样取值:

    <s:property value="#parameters.t"/>
    

    这个语句等价于:

    <s:property value="ActionContext.getContext().parameters.t"/>
    

    到这里我们的结果集就讲完了。

    如有错误,欢迎指正。

  • 相关阅读:
    P4365 [九省联考2018]秘密袭击coat
    P3705 [SDOI2017]新生舞会 01分数规划+费用流
    P4313 文理分科 最小割
    P1707 刷题比赛
    P3994 高速公路 树形DP+斜率优化+二分
    P3384 【模板】树链剖分
    P4915 帕秋莉的魔导书
    P3690 【模板】Link Cut Tree (动态树)
    P3615 如厕计划
    loj #2538. 「PKUWC2018」Slay the Spire
  • 原文地址:https://www.cnblogs.com/MindMrWang/p/8143967.html
Copyright © 2011-2022 走看看