struts2 ResultType四种基本类型

2023-11-08

ResultType四种基本类型:

<package name="resultTypes" namespace="/r" 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" class="com.action.Hello3Action">
			<!--这种配置方法测试不通过,所以是错误的:<result type="chain">/secure/r5</result>-->
			<result type="chain">
				<param name="actionName">r5</param>
				<param name="namespace">/secure</param>
			</result>
		</action>

		<action name="r4">
			<result type="redirectAction">r2</result>
		</action>
	</package>

	<package name="secure" namespace="/secure" extends="struts-default">
		<action name="r5" class="com.action.Hello5Action">
			<result>/r5.jsp</result>
		</action>
	</package>
第一种:dispatcher:服务器端视图跳转,只能跳转到视图,不能跳转到action,实验结果也是这样的

第二种:redirect:客户端重定向到视图

第三种:chain:服务器跳转到action

第四种:redirectAction:客户端重定向到Action,本质上就是客户端发送第二次请求


重点研究第三种跳转,这种方式我觉得有点模糊:

官方示例:

<package name="public" extends="struts-default">
    <!-- Chain creatAccount to login, using the default parameter -->
    <action name="createAccount" class="...">
        <result type="chain">login</result>
    </action>

    <action name="login" class="...">
        <!-- Chain to another namespace -->
        <result type="chain">
            <param name="actionName">dashboard</param>
            <param name="namespace">/secure</param>
        </result>
    </action>
</package>

<package name="secure" extends="struts-default" namespace="/secure">
    <action name="dashboard" class="...">
        <result>dashboard.jsp</result>
    </action>
</package>

这是配置方面的用法,一种是同包访问,另一种是不同包访问,示例已经很清楚了,不解释;直接copy

chain这种方式经过多个action跳转以后,它对struts2 的ValueStack有什么影响?这是我们重点讨论的地方,在一次实际应用当中碰到了这个问题

这个问题的理论基础是:Struts2中,一个请求在最终到达Action的方法之前,Action对象本身会被压入ValueStack(实际上就是放到ValueStackCompoundRoot中),所以Action对象是CompoundRoot中的一个元素。这是我看了李老师的博客才最终解决这个问题的,有兴趣可以参见李老师的原文,对ongl以及struts2解释相当的深刻:

http://blog.csdn.net/li_tengfei/article/details/6098134

根据上面的struts配置文件,这是chain方式跳转的两个action:

public class Hello3Action extends ActionSupport {

	private String r3 = null;

	private String name = null;

	public String execute() {
		r3 = "Hello3Action r3";
		name = "Helle3Action name";
		System.out.println();
		return SUCCESS;
	}

	public String getR3() {
		return r3;
	}
	public void setR3(String r3) {
		this.r3 = r3;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

Hello5Action:

package com.action;

import com.opensymphony.xwork2.ActionSupport;

public class Hello5Action extends ActionSupport{
	
	private String r5 = null;
	private String name = null;
	
	public String execute(){
		r5 = "Hello5Action r5";
		name = "Helle5Action name";
		return SUCCESS;
	}
	public String getR5() {
		return r5;
	}
	public void setR5(String r5) {
		this.r5 = r5;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

根据struts2的配置文件,首先请求r3 action,然后r3 action服务器跳转到r5 action,然后服务器跳转到r5.jsp,展现结果:

根据李老师的理论,那么Hello3Action会先压入ValueStack对象,然后Hello5Action再压入ValueStack,如果要取想Hello3Action的name属性,可以用:<s:property value="#root[1].name"/> 取出Hello3Action的name属性

下面是取值代码:

r5页面<br/>
直接访问r3:${r3}<br/>
直接访问r5:${r5}<br/>
访问r3对象:${root[1].r3 }<br/>
访问r5对象:${root[0].r5 }<br/>
<hr/>
直接访问name属性,必只能访问到Hello5Action的name属性:${name }<br/>
必须使用另外的方式访问r3对象了:${root[1].name }<br />
<s:property value="#root[1].name" />

相关ValueStack的机制:http://blog.csdn.net/li_tengfei/article/details/6098134

ValueStack和CompoundRoot的关系: http://hi.baidu.com/maml507/item/d2051132965b6e109cc65ee3


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

struts2 ResultType四种基本类型 的相关文章

随机推荐

  • 虚拟化技术的工作原理_虚拟化技术与原理简介

    随着云计算技术的发展及其应用的普及和深入 云平台资源的高效利用成为越来越重要的问题 而服务器虚拟化技术是云计算实现资源有效利用的关键技术 云计算的云端系统 其实质上就是一个大型的分布式系统 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台 而
  • LayUI导入Excel表(Apache POI)

    LayUI导入Excel表 Apache POI 前端框架LayUI 将excel表导入到数据库 并展示在页面 首先要明白 excel表整体构造 一整个 excel表是一个工作簿 workbook 而其中又有很多工作表 sheet 然后一行
  • QT C++ 欧姆龙PLC网络通信协议FinsTcp库 通信慢的问题

    这个库移植自我自己以前的C 欧姆龙PLC网络通信协议FinsTcp库 详见以下链接 https blog csdn net panasonicsony article details 126300935 QT主界面上一个写入PLC辅助触点的
  • struts2 开发中,一些功能需要在struts.xml中的配置

    1 普通package
  • Spring Boot启动时自动执行方法

    摘要 有时启动springboot项目后需要执行一些方法初始化 如资源加载 数据准备等 首先不能放在main方法中SpringApplication run 之前 因为此时bean还未初始化 除非你不使用bean 当然也不能放其后 因为ru
  • 【MySql安装】msi版本

    提示 不是压缩版安装 是msi直装的 目录 前言 一 到官网下载msi版 二 安装 1 安装MySql数据库 2 查看服务启动 总结 前言 什么是msi呢 很多新手对此不是很清楚 mysql msi 为安装版本 安装过程中将自动配置 包含安
  • 【python】生成随机数字/字母/指定位数的字母+数字的字符串

    在利用python代码进行开发或者测试中 难免会遇到一些需要输入随机值的相关操作 这里特意总结了一下 一 随机数字的生成 1 生成0 9 或其他数字段 中的一个 串 随机数字 import random def create random
  • 内网穿透(详细且免费)部署

    内网穿透 详细且免费 100 成功 我们在做开发时 不想购买服务器 只想搭建我们本地的服务器 我们搭建的本地服务器只能供我们自己电脑的浏览器访问 或者处于同一个wifi下的手机访问平常我们访问的网站都是由具有公网ip的服务器提供的 如果想做
  • 002-实现Unity3d中触摸屏幕控制物体的旋转和缩放 代码实现

    1 直接帮到物体的身上就可以了 using UnityEngine using System Collections using System IO public class hehe MonoBehaviour private Touch
  • 日撸 Java 三百行(01-10天,基本语法)

    目录 总述 01 10天 基本语法 11 20天 线性数据结构 21 30天 树与二叉树 31 40天 图 41 50天 查找与排序 51 60天 kNN 与 NB 61 70天 决策树与集成学习 71 80天 BP 神经网络 81 90天
  • 华为手机大疆云台自动跟随_大疆Osmo Mobile 3 我的第一支手机云台

    手机逐渐取代相机 成为人们旅行的主要记录工具 视频的普及让我们的旅行记录更完美 但是手机拍的 地震 视频通常让我们觉得很糟心 于是手机云台诞生了 大疆Osmo Mobile 3 我的第一支手机云台 作为在稳定器方面十分有建树的大疆 前不久推
  • Python爬虫之bs4数据解析select方法

    select作用如其名 筛选 通过指定的类 标签 id 层级查找 1 通过类查找 from bs4 import BeautifulSoup soup select class名称 2 通过ID查找 soup select id名称 3 通
  • torch.nn.LocalResponseNorm(局部响应归一化)详解(附源码解析)

    torch nn LocalResponseNorm 局部响应归一化的理解 局部归一化的动机 在神经生物学有一个概念叫做侧抑制 lateral inhibitio 指的是被激活的神经元抑制相邻神经元 归一化的目的是 抑制 局部响应归一化就是
  • 在运行中修改unity的animator中某个状态的速度

    要在运行中修改动画播放速度的话不能用UnityEditor 只能修改animator的速度 不能修改animator里某个状态的速度 运行中修改animator的速度不会保存 但是运行中修改animator里某个状态的速度则会保存下来 这大
  • js判断是否是base64字符串

    js判断是否是base64字符串 isBase64 str if str str trim return false try return btoa atob str str catch err return false
  • 多元线性回归——梯度下降法、sklearn实现

    梯度下降法实现多元线性回归 代码实现 载入数据 data genfromtxt r Delivery csv delimiter 观察一下数据 x data为特征值 y data为标签值 所以应该设置3个参数 0 1 2 lr 0 0001
  • opencv实战—目标跟踪-KCF目标跟踪方法

    一 函数 1 vars vars 函数返回对象object的属性和属性值的字典对象 2 tracker cv2 multiTracker create 获得追踪的初始化结果 3 continue 语句跳出本次循环 而break跳出整个循环
  • HBase笔记-1.基本介绍

    HBase简介 HBase Hadoop Database 是一个提供高可靠性 高性能 列存储 可伸缩 实时读写的数据库系统 利用Hadoop HDFS作为其文件存储系统 利用Hadoop MapReduce来处理HBase中的海量数据 利
  • 【Linux基线检查】

    文章目录 前言 一 账户密码安全 二 文件和目录权限 三 访问控制 四 安全审计和日志记录 五 开放端口和服务限制 总结 前言 为保障服务器的安全性 通常需要对服务器做一些安全配置 现介绍一下Linux部分的安全配置 以下命令适用于Cent
  • struts2 ResultType四种基本类型

    ResultType四种基本类型