`

Struts2参数传递

阅读更多
要使用struts2,首先需要在web.xml中配置一个监听器:
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

接着,我们实现一个Action,在struts2中,实现Action并不像struts1那样一定需要继承一个基类,你也可以不继承任何基类:
package org.darkness.struts2.test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class ParamsAction {

	private int id;
	private String username;
	private String password;
	private boolean boolvalue;

         // getter and setter methods here

	public Utils getUtils() {
		return new Utils();
	}

	public String saveUser() {

		// 直接赋值,可以将这个值传递到下一个页面
		id = 10;

		// 通过ActionContext对象来传值,在页面上,通过#name来取值
		ActionContext.getContext().put("name", "暗之幻影");

		// 通过httpRequest对象来传输数据
		ServletActionContext.getRequest().setAttribute("sex", "男");
		
		List<User> users = new ArrayList<User>();
		for (int i = 0; i < 10; i++) {
			User user = new User();
			user.setId(i);
			user.setUsername("darkness" + i);
			user.setPassword("sky" + i);
			users.add(user);
		}
		
		ActionContext.getContext().put("users", users);

		return Action.SUCCESS;
	}

}

代码看上去很简洁。我们定义了一个saveUser方法,这个方法的定义也不像struts1中那样一定需要request、forward参数什么的,完全就是一个很简单的方法。我们要想向request中设值则可以通过ServletActionContext.getRequest()获取到容器上下文中的request对象,就像这样:ServletActionContext.getRequest().setAttribute("sex", "男");
但是,struts2并不推荐这样使用,struts2推荐使用ActionContext上下文来设值,代码如下:
ActionContext.getContext().put("name", "暗之幻影");

设置好值之后,我们可以通过struts2提供的一个静态常量Action.SUCCESS来返回需要跳转的页面了。Action.SUCCESS其实就是一个"success"字符串,它会到struts.XML中去找当前action中名称为success的result来进行跳转。struts.XML的配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<package name="simple" namespace="/simple"
		extends="struts-default">
		<action name="hello"
			class="org.darkness.struts2.test.ParamsAction">
			<result name="success">
				/struts2/test/save_success.jsp
			</result>
		</action>
	</package>
</struts>


struts2的配置文件通过使用package将action进行分类,这样便于组织。通常这个package需要继承一个名为"struts-default"的package,同时也引入了命名空间namespace的概念。
下面是一些比较简单的辅助类、POJO类:
package org.darkness.struts2.test;

public class Utils {
	
	public static String toLowerCase(String str) {
		return str.toLowerCase();
	}

	public String toUpperCase(String str) {
		return str.toUpperCase();
	}
}

package org.darkness.struts2.test;

public class User {

	private int id;
	private String username;
	private String password;
	private Person person;

         // getter and setter methods here
}

package org.darkness.struts2.test;

public class Person {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public String fact(User u){
		return u.getUsername()+",";
	}
	
	public String getFact(){
		return "username";
	}
}


接下来需要将刚才action中设置的值在页面中显示了,页面定义如下:
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
id:<s:property value="id"/> <br>
username: <s:property value="username"/> <br>
password: <s:property value="password"/> <br>
booleanvalue: <s:property value="boolvalue"/> <br>
name=<s:property value="#name"/> <br>
name=<s:property value="name"/> <br>
sex=<s:property value="#request['sex']"/> <br>
<s:iterator value="#users">
	id:<s:property value="id"/>,
	username:<s:property value="@org.darkness.struts2.test.Utils@toLowerCase(username)"/>,
	password:<s:property value="new org.darkness.struts2.test.Utils().toUpperCase(password)"/>,boolvalue:<s:property value="boolvalue"/> <br>
</s:iterator>
username: <s:property value="utils.toUpperCase(username)"/> <br>
davevalue: <s:property value="datevalue"/> <br>
point: <s:property value="point"/> <br>
</body>
</html>

struts2使用了OGNL语言来对action上下文中设置的变量进行解析输出。OGNL的基础请参考本blog中“OGNL入门”那篇教程,我这边也就不再做过多的解释了。
上面的代码都完成后,我们就可以来进行测试了。在浏览器中手动输入如下url,或者在root文件夹下新建一个jsp文件,加上如下代码:
<a href="simple/hello!saveUser.action?username=darkness&password=sky&boolvalue=true">调用ParamsAction.saveUser方法</a>

点击这个超链接,它会调用simple命名空间下的名称为hello的action中的saveUser方法进行参数传递。经由saveUser方法调用后,会跳转到success对应的页面,显示出刚才传递的数据。
分享到:
评论

相关推荐

    struts2 向结果传参数

    NULL 博文链接:https://cdxs2.iteye.com/blog/1926357

    Struts2中的参数传递

    我们知道,Struts2完成参数传递处理工作的基础是OGNL和ValueStack。而在这个 过程中,我也把Struts2所要做的工作大致归纳为两个方面: 1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. ...

    AJAX和struts2传递JSON数组

    利用AJAX传递JSON数组,后台struts2的action接收。 详细代码简单易懂。

    struts2支持方法上传递参数

    在struts2中可以在方法上传递相应的参数,不需要使用注解,直接使用参数名进行界面传递参数信息,并且可以在界面进行访问

    Struts2学习笔记(5)-参数传递方法

    本文主要介绍Struts2中参数传递方法,希望能给大家做一个参考。

    uploadify3与struts2结合实现有进度条文件上传实例

    这是根据uploadify3 2结合struts2搭建的文件上传环境 可以直接导入eclipse运行 每步实现基本都加了注释 以下是我碰到的问题: 1 判断session是否失效 本实例没测试这个问题 但在工作项目中碰到了 但原因在这里...

    struts2传递参数及ModelDriven的使用示例

    刚开始学struts2时,自己写的小工程。

    struts2验证框架

    struts2 验证框架,彻底简化判断页面传递过来的参数,必学内容

    Struts2+JasperReport报表应用

    而随着Struts2的流行,就应该研究一下在Struts2下如何利用JasperReports进行报表输出。本示例比较简单,采用的数据源即为JavaBean,而没有采用复杂的数据库,其实原理是一样的。只是传递给JasperReports的参数随着...

    struts2 +jquey uploadify3.2 实现多文件上传

    fileID:要取消的列队文件id 不传递参数时 表示取消列队中的第一个文件上传 传递星号 表示取消列队中的所有文件上传 suppressEvent:设置为true将禁止onUploadCancel事件 取值:String &quot;true&quot;|&quot;事件...

    Struts2 in action中文版

    第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...

    struts2的详细资料

    struts2的资料以及struts的ui标签的使用,struts2如何和ajax进行参数传递

    struts2中action接收参数的方式

    程序参考源代码 博文链接:https://honly-java.iteye.com/blog/1605764

    非常不错的中文struts2教程[CHM]

    内容: 1、OGNL —— 数据运转的催化剂 2、Result机制,让视图更丰富 ...5、Struts2中的参数传递 6、标签库,永恒的争论话题 7、拦截器详解 8、配置,灵活还是简单? 9、深入plugin 10、在Struts2中使用OGNL

    uploadify+struts2+json前台动态向后台传数据

    uploadify+struts2+json 前台动态向后台传数据,并显示后台返回参数完成文件上传功能

    struts2重定向实例源码

    struts result类型中redirect与redirectAction的使用 包括参数传递。

    struts2的总结,适合初学者

    4、在action中把HttpServletRequest参数和HttpServletResponse参数传递过去。 5、在过滤器中通过java的反射机制调用action。 6、详细过程参照cn.itcast.action包中的内容 3Struts2介绍 1、struts2是apache组织发明的...

    一步步学习Struts2

    内容包括ognl,result机制,struts2配置详解,struts2中的action,struts2中的参数传递,标签库,拦截器的详解,深入plugin

    深入浅出Struts2(附源码)

    3.3 把静态参数传递给一个动作 41 3.4 ActionSupport类 41 3.5 结果 42 3.5.1 Chain 43 3.5.2 Dispatcher 44 3.5.3 FreeMarker 44 3.5.4 HttpHeader 44 3.5.5 Redirect 45 3.5.6 Redirect Action 46 3.5.7 ...

    Struts2 完整的日本项目

    刚完成的 日本的项目 struts2 jdom解析 远端服务器 xml 文件 自定义struts2 标签分页 分页只需要向 其 传递2参数 页面上 自定义的标签 自动分页

Global site tag (gtag.js) - Google Analytics