`

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中,ResultType是Action执行后跳转到不同页面或执行不同操作的一种策略。默认情况下,Struts2提供了一些内置的ResultType,如“dispatcher”(用于转发到JSP或其他资源)、“stream”(用于处理流式数据,...

    struts2所需的包和Struts2_json所需包

    导入这些包后,开发者可以按照Struts2的配置方式设置Action,通过`@ResultType("json")`注解或在配置文件中指定`result`类型为`json`,Struts2就会自动将Action的返回值转化为JSON格式并发送到客户端。 在实际开发...

    struts2 2.3.1api

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Web开发领域中被广泛使用。2.3.1版本是Struts2的一个重要里程碑,提供了许多特性和改进,旨在提升开发效率和应用的健壮性。下面...

    struts2 Result类型

    在“Struts2_1500_ResultType”这个压缩包文件中,可能包含了Struts2框架的源代码、相关的示例项目、文档或者自定义Result类型的实现。通过深入研究这些内容,你可以更全面地掌握Struts2 Result类型的使用和扩展方法...

    Struts2配置详解

    ### Struts2配置详解 #### 一、总览 在深入了解Struts2配置文件之前,我们首先需要了解其整体架构。Struts2的核心配置文件通常采用XML格式,并且具有非常清晰的结构。此配置文件主要负责定义应用的行为、组件以及...

    struts2-jsondemo

    5. **Action中的JSON处理**:在Action中,我们可以使用Struts2提供的`@ResultType("json")`注解或者在配置文件中声明结果类型,使得Action可以直接返回Java对象,Struts2会自动将其转换为JSON。 6. **JSONParam注解...

    struts2-json

    在Struts2的配置文件(struts.xml或struts.properties)中,需要为Action添加一个`@ResultType`注解或结果类型配置,指定为`json`。这样,当Action执行完成后,会返回JSON格式的数据。 3. **JSON Value Stack**: ...

    struts2返回json

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离...

    struts2中AJAX实现

    在Struts2中,可以使用`@ResultType("json")`注解或在配置文件中定义JSON结果类型。 5. **Struts2拦截器**:Struts2的拦截器机制允许在Action调用前后执行特定逻辑。在AJAX场景中,可能需要使用一些特定的拦截器,...

    maven-web项目 Struts2 Struts注解 Struts2返回json

    Struts2是一个强大的Java Web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用。在这个“maven-web项目”中,我们将会深入探讨如何利用Struts2框架,结合Maven构建工具,以及Struts2的注解和JSON支持...

    struts2.jar

    结果类型由`struts.resultType`属性指定。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action与视图之间传递数据。你可以在JSP中直接使用OGNL表达式来访问Action...

    Struts2+JSON+YUI组合应用之二构建RichClient

    Struts2提供了`@ResultType("json")`注解或在struts.xml配置文件中配置JSON结果类型,使得Action可以直接返回JSON对象。 2. **YUI作为前端展示**:利用YUI的组件和API,可以创建丰富的用户界面,如使用YUI的...

    struts2属性文件struts.xml的配置

    ### Struts2属性文件struts.xml的配置 在Java Web开发中,Struts2框架作为MVC模式的一种实现,提供了一种简洁的方式来构建应用程序。其中,`struts.xml`是Struts2的核心配置文件,用于定义项目的包、常量、拦截器等...

    struts2源码解析.pdf

    Struts2是一个流行的Java Web框架,它为开发者提供了一种结构化的MVC(Model-View-Controller)架构来构建应用程序。在"struts2源码解析.pdf"文档中,主要探讨了以下几个关键组件及其功能: 1. **ActionContext**:...

    json+struts2整合jar包

    JSON(JavaScript Object Notation)和Struts2是两种在Web开发中广泛使用的技术。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。而Struts2是一个基于MVC(Model-View-Controller)...

    struts2中result类型之redirectAction

    1. 当Action执行完成后,如果配置了`resultType="redirectAction"`,Struts2会生成一个重定向URL。 2. 这个URL包含了Action的名字、Namespace以及可能的参数。 3. 浏览器收到这个重定向响应,然后根据URL发起新的...

    struts2-core-2.2.1 jar下载、源码下载 非常全面!!绝对可用!! 所需资源分最少。

    通过`struts2-core`的API文档,开发者可以快速查找和了解如何使用Struts2的各种功能,例如ActionSupport、ResultType、InterceptorStack等。这些文档通常包括类的描述、方法签名、参数说明和返回值,有助于提高开发...

    Struts2 自定类型转换器(三十四)

    在Struts2框架中,自定义类型转换器是开发者为了满足特定需求,对框架默认的类型转换机制进行扩展的一种方式。Struts2允许我们创建自己的转换器类来处理输入数据,确保模型对象的属性能够正确地被转换为预期的数据...

    Struts2类型转换(一)----常规类型,自定义类型,错误处理

    这时,我们可以实现`org.apache.struts2.util.TypeConverter`接口,并在Action类或整个包上使用`@ResultType`注解进行注册。这样,当Struts2遇到匹配的类型时,就会调用我们自定义的转换器进行转换。同时,也可以...

    struts2_action代码

    Struts2是一个强大的Java web应用程序框架,它基于Model-View-Controller(MVC)设计模式,主要用于构建可维护性高、...同时,这也为进一步学习Struts2的其他高级特性,如Interceptor、ResultType、Plug-in等打下基础。

Global site tag (gtag.js) - Google Analytics