Struts2学习---result结果集 result type:全局结果集:动态结果集带有参数的结果集

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

  • 结果集类型(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"/>

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

如有错误,欢迎指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

day25_Struts2学习笔记_02

在 struts.xml 配置文件中,通过参数注入的方式,给动作类的参数注入值。相当于调用的是该参数的 setter方法 。控制台输出的是 张三,18 ,如下图...

5110
来自专栏决胜机器学习

ModernPHP读书笔记(三)——PHP的良好实践

ModernPHP读书笔记(三)——PHP的良好实践 (原创内容,转载请注明来源,谢谢) 一、密码 1、密码不宜用明文存储,也不能用可以解密的...

31660
来自专栏芋道源码1024

Java 应用中的日志

作为日志产生的日期和时间,这个数据非常重要,一般精确到毫秒。由于一般按天滚动日志文件,日期不需要放在这个时间中,使用 HH:mm:ss.SSS 格式即可。

18830
来自专栏逢魔安全实验室

解密混淆的PHP程序

85550
来自专栏小尘哥的专栏

springboot使用properties定义短信模板

通常我们做开发时候会遇到短信发送邮件发送之类的需求,发送内容往往会由客户提供一个模板,如果我们是在程序里拼接字符串来搞定这个模板,很明显是一种坑队友的做法。一般...

12830
来自专栏专注 Java 基础分享

Struts2框架的基本使用

     前面已经介绍过了MVC思想,Struts2是一个优秀的MVC框架,大大降低了各个层之间的耦合度,具有很好的扩展性。从本篇开始我们学习Struts2的基...

20970
来自专栏猿人谷

Linux系统下如何查看及修改文件读写权限

查看文件权限的语句:   在终端输入: ls -l xxx.xxx (xxx.xxx是文件名)   那么就会出现相类似的信息,主要都是这些: -rw-rw-r-...

21390
来自专栏漫漫全栈路

ubuntu搭建内网穿透服务Ngrok

说些闲话: 最近一直在乱折腾,看看C,看看Python,又打算去看一下PHP,然后又是前端的Vue.Js,最后发现——嗯?我都在干些什么? 当然不论是在做什么...

1.1K60
来自专栏青玉伏案

iOS开发之再探多线程编程:Grand Central Dispatch详解

Swift3.0相关代码已在github上更新。之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread、操作队列以及GCD,介绍的不够深入。今...

20270
来自专栏北京马哥教育

python线程笔记

豌豆贴心提醒,本文阅读时间5分钟 来源:伯乐在线 原文:http://python.jobbole.com/87498/ 引言&动机 考虑一下...

37750

扫码关注云+社区

领取腾讯云代金券