`

struts2的resultType

阅读更多
struts2定义了多种resultType,包括dispatcher和redirectAction等

在struts-default.xml文件中,定义了所有的resultType类型
<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>

有空可以跟进去看看源码

本文重点说的是默认的dispatcher和redirectAction的区别



这里点击“删除”,会执行一段javascript代码:
$(document).ready(function() {
	$(".delete_book").click(deleteBook);
});

function deleteBook() {
	var $deleteButton = $(this);
	var $idSpan = $deleteButton.parent().find(".hidden_book_id");
	var bookId = $idSpan.text();
	var url = "delete.action?id=" + bookId;
	window.location.href = url;
}

关键就是会跳转到delete.action?id=xxx这个URL,进入Action的delete()方法
@Autowired
	private IBookService bookService;

	private List<Book> books;// 书籍列表

	private String id;// 接收客户端传值

	public String list() {
		books = bookService.getAllBooks();
		return SUCCESS;
	}

	public String delete() {
		bookService.deleteBookById(id);
		books = bookService.getAllBooks();
		return SUCCESS;
	}

此时struts.xml的配置是这样的:
<package name="bookManage" extends="struts-default" namespace="/book">
		
		<action name="list" class="bookAction" method="list">
			<result name="success">../jsp/bookManage/bookList.jsp</result>
		</action>
		
		<action name="delete" class="bookAction" method="delete">
			<result name="success">../jsp/bookManage/bookList.jsp</result>
		</action>
		
	</package>

代码很简单,就不解释了。功能可以实现,不过有个问题,就是用这种配置方式,删除操作之后,URL是这样的:



这时用户如果用F5刷新浏览器,就会发生重复提交的问题。所以可以这样修改,将resultType改成redirectAction
<package name="bookManage" extends="struts-default" namespace="/book">
		
		<action name="list" class="bookAction" method="list">
			<result name="success">../jsp/bookManage/bookList.jsp</result>
		</action>
		
		<action name="delete" class="bookAction" method="delete">
			<result name="success" type="redirectAction">list.action</result>
		</action>
		
	</package>

这样执行完delete.action后,会跳转进list.action,所以delete()方法也可以删除一行代码
@Autowired
	private IBookService bookService;

	private List<Book> books;// 书籍列表

	private String id;// 接收客户端传值

	public String list() {
		books = bookService.getAllBooks();
		return SUCCESS;
	}

	public String delete() {
		bookService.deleteBookById(id);
		return SUCCESS;
	}

实际看点击“删除”按钮的前后URL对比





实现了我们的目的

总结来说,默认的resultType是dispatcher,一般用来处理jsp跳转。如果希望一个action执行之后进入另一个action,可以用redirectAction,如果要多个action共同响应一个请求,可以用chain

最后补充一点,通过redirectAction进入新的Action,会新创建一个Action的实例
public String list() {
		System.out.println("after redirectAction, currentBook is null or not");
		if (null == currentBook) {
			System.out.println("currentBook is null");
		} else {
			System.out.println("currentBook is not null");
		}
		books = bookService.getAllBooks();
		return SUCCESS;
	}

<action name="delete" class="bookAction" method="delete">
			<result name="success" type="redirectAction">list.action</result>
		</action>

输出结果:
after redirectAction, currentBook is null or not
currentBook is null
  • 大小: 14.6 KB
  • 大小: 13.7 KB
  • 大小: 14.9 KB
  • 大小: 13.3 KB
分享到:
评论

相关推荐

    自定义的struts2的resulttype

    自定义struts2的result-type的一个小例子...

    Struts2技术手册-Struts2精华教程-电子书

    本书内容非常全面,涵盖了众多书籍所有知识要点,并结合作者自己经验总结而编写,内容相当丰富,是查找技术的好帮手及学习Struts2的不二选择 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...

    Struts2 result和type

    Struts2 result和type

    让Struts2可以从classpath及jar中查找jsp文件

    2、在你的struts.xml里面包含这个struts-base.xml。 3、参照config.xml改写你的需要从classpath(包括jar文件内)查找jsp的action。 4、注意:这个ResultType会在你的WEB-INF下面建立一个名为CLASSPATH-PAGES的...

    struts2中常用Result类型(type)的用法和出现的问题

    struts2 常用Result类型(type)的用法 Invalid result location value/parameter错误的解决办法

    深入理解Mybatis中的resultType和resultMap

    给大家介绍了mybatis中的resultType和resultMap的用法实例讲解,MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,至于两种用法区别,通过本文一起学习吧

    Struts2学习笔记(9)-Result配置全局结果集

    主要介绍Struts2中使用Result配置全局结果集的方法,希望能给大家做一个参考。

    MyBatis中关于resultType和resultMap的区别介绍

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,那么MyBatis中关于resultType和resultMap的区别是什么呢?下面小编通过本文给大家解答下

    mybatis分布查询以及resulttype和resultmap的用法

    mybatis分布查询以及resulttype和resultmap的用法,以及作为一个新手对于mybatis的学习过程的记录

    MyBatis中resultMap和resultType的区别详解

    主要介绍了MyBatis中resultMap和resultType的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Mybatis中的resultType和resultMap查询操作实例详解

    resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题。这篇文章主要介绍了Mybatis中的resultType和resultMap查询操作实例详解,需要的朋友可以参考下

    loadrunner.net

    $SM$i%2bVqGd4Zrg0nzFPTAbCG%2fQrn0f2UZowYfT2RitHvQEb1t1qlFq3Rt65IHxgfcRnD&TARGET=$SM$...resultType%3ddocument%26documentURL%3dKM84064%26resultsURL%3d$%2fselfsolve$%2fpatches%26allowReturn%3dtrue...

    泛型集合与XML元素之间D转换

    泛型集合与XML元素之间D转换 将数据保存到文件中 和将文本中的数据取出来

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    Mybatis结果集自动映射的实例代码

    在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在&lt;...语句上指定resultType。这个时候其实就用到了Mybatis的结果集自动映射,下面通过本文给大家分享Mybatis结果集自动映射的实例代码,一起看看吧

    mybatis_xml关联插件

    安装步骤请参考:https://blog.csdn.net/qq_43097451/article/details/84612230

    MyBatis环境配置及入门

    1、配置文件 Configure.xml 是 mybatis 用来建立 ...2、Configure.xml 里面 的是包含要映射的类的 xml 配置文件。 3、在User.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。

Global site tag (gtag.js) - Google Analytics