Action只是Struts2控制器的一部分,所以它不能直接生成对浏览者的响应。Action只负责生成响应的视图组件,通常是JSP页面,而Action会为JSP页面提供显示数据。

    Action处理完用户的请求后,将会返回一个普通字符串(称之为逻辑视图),Struts2框架收到这个逻辑视图后,把请求转发到对应的视图资源,视图资源将结果呈现给用户。必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可以让系统转到实际的视图资源。

一、配置结果

Struts2在struts.xml中使用<result…/>元素来配置结果,根据该元素所在位置的不同,Struts2提供了两个结果。

  • 局部结果:将<result…/>作为<action…/>元素的子元素配置。
  • 全局结果:将<result…/>作为<global-result…/>元素的子元素配置。

配置<result…/>元素时通常需要指定如下两个属性:

  • name:该属性指定所配置的逻辑视图名,缺省值为success。
  • type:该属性指定结果类型,缺省值为dispatcher(用于与JSP整合的结果类型),可以通过修改配置文件改变默认的结果类型。

典型的<result…/>配置片段如下:

<action name="abyss" class="abyss.LoginAction" >
<result name="success" type="dispatcher" >
<param name="location">/thank.jsp</param>
</result>
</action>

对于不同的结果类型,<param../>元素的name属性的参数是不同的,在此处<param…/>元素的name属性可以为如下两个值:

  • location:该参数指定了该逻辑视图对应的实际视图资源。
  • parse:该参数指定是否允许在实际视图名称中使用OGNL表达式,该参数默认为true。

通常无须指定parse参数的值,所以常常采用一下简化形式来配置实际视图资源。

<action name="Login" class="abyss.LoginAcion" >
<result name="success" type="dispatcher">/thank.jsp</result>
</action>
 

二、Struts2支持的结果类型

Struts2支持使用多种视图技术,例如JSP、Velocity和FreeMarker等。

结果类型决定了Action处理结束后,下一步将调用哪种视图资源来呈现处理结果。

Struts2的结果类型要求实现com.opensymphony.xwork2.Result,这是所有结果类型的通用接口,如果我们要自定义结果类型就需要实现该类。

Struts2默认提供了一些结果类型,位于struts-core-2.2.1.jar中的struts-default.xml中,下面是配置片段:

<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>

从上面可以看出如果指定了default="true"属性,表示该类型是默认结果类型。

三、Action属性配置视图资源

配置<result…/>元素时,可以使用${属性名}的方式来指定视图资源。${属性名}里的属性名就是对应Action实例里的属性,并且还可以使用完全的OGNL表达式,即${属性名.属性名.属性名}。例如:

<action name="login" class="org.crazyit.app.action.LoginAction">
<result name="success">/${result}.jsp</result>
</action>

其中视图资源由LoginAction类中的result属性决定的,如果LoginAction类中没有result属性,则值为null。

四、使用preResultListener

PreResultListener是一个监听器接口,它可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。(可以理解为,定义一个函数beforeResult(),在页面转到视图资源之前,系统会自动调用该函数)。

PreResultListener监听器可由Action和拦截器添加。一旦为Action添加PreResultListenr监听器,该监听器会自动调用beforeResult()方法;一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action起作用。

在Action中添加示例如下:

ActionContext.getContext().getActionInvocation().addPreResultListener(
new PreResultListener(){ @Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
invocation.getInvocationContext().put("extra", new Date()+"由"+resultCode+
"逻辑视图名转入");
} });
Technorati 标签: java,struts2

 

 

 

 

 
 

 

【学习笔记】Struts2之配置处理结果的更多相关文章

  1. 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法

    @RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...

  2. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  3. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  4. Qt5学习笔记(1)-环境配置(win+64bit+VS2013)

    Qt5学习笔记(1)-环境配置 工欲善其事必先-不装-所以装软件 久不露面,赶紧打下酱油. 下载 地址:http://download.qt.io/ 这个小网页就可以下载到跟Qt有关的几乎所有大部分东 ...

  5. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  6. 树莓派学习笔记——USB wifi配置指南

    0 前言     树莓派既能够使用有线网络又能够无线网络,假设使用有线网络不方便的话能够借助USB wifi无线网卡让树莓派也插上无线"翅膀". 可是和使用有线网络即插即用的方式不 ...

  7. 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器

    驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...

  8. struts2框架学习笔记2:配置详解

    核心配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC ...

  9. Struts2学习笔记(三):result配置的各项视图转发类型

    Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...

  10. 深度学习笔记------linux下配置安装caffe-cpu only模式

    本文适合初学者学习配置caffe的最简单方法.这是我在看了网上各种大神的方法后总结的最傻瓜式的配置方法了. 本人也是在不断地配置caffe过程中受打击与成长@.@ 第一步.配置caffe所需的依赖环境 ...

随机推荐

  1. Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds

    错误:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 错误提示就是我们限定了部署的时间导致的错 ...

  2. 3-linux下部署tomcat应用

    linux下部署tomcat应用 相关软件下载 jdk      http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...

  3. [原创]最近使用React-Native的适配问题和警告搜集

    主要记录一下最近使用RN 0.29.2版本遇到的适配的坑以及部分警告的解法. 适配类: 安卓输入框圆角.边框颜色.粗细等无法设置成功,需要在TextInput外面新增一个View设置圆角,TextIn ...

  4. [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

  5. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  6. Nfs+Drdb+Heartbeat 数据存储高可用服务架构方案

    一.方案的应用场景 适用于2千万-3千万PV架构的网站,Nfs数据存储高可用服务方案 备注:互联网排名前30左右公司常用的架构 二.生产环境方案部署原理图 三.生产环境服务器硬件配置: 生产环境中采用 ...

  7. Mac合并分区

    Mac合并分区 公司Mac电脑之前是win系统,重新安装了mac系统后,多了一个分区.用分区助手打开后,减号是灰色的,上网搜了很多帖子,都是点击减号直接将分区删除等等.减号不能点击的就要重新装系统了. ...

  8. HDF5基本使用方法

    HDF5, 大量(海量?)数据存储的一种解决方案. HDF的全称是Hiearchical Data Format, 5是版本号(未考证过TODO). 一个HDF5文件操作起来就像一个独立的文件系统. ...

  9. 远程桌面时plsql的复制粘贴功能失效

    解决办法:重新启动远程桌面上的rdpclip进程就可以复制粘贴了,但是每次重开远程桌面都会出现同样的问题.可以rdpclip这个设置成开机启动.

  10. PHP 扩展开发(将自己的一些代码封装成PHP扩展函数)

    今天时间不多,先给个地址,能搜到我这篇blog的朋友先看看我最近在看的一些文章.资料吧: 我的环境是 lnmp1.1 的 (LNMP一键安装包),所以要进行PHP扩展开发首先应该对环境配置和shell ...