您的位置:首页 > 编程语言 > Java开发

struts2学习笔记(1)---JSP页面向Action类传递参数

2015-06-06 21:18 696 查看

一、以用户登录为例,struts.xml配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<constant name="struts.action.extension" value="action,do," />
	<constant name="struts.devMode" value="true" />
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />

	<package name="default" namespace="/" extends="struts-default">
		<default-action-ref name="default"/>
		
		<action name="user_*" class="org.Test.action.UserAction" method="{1}">
			<result>/success.jsp</result>
		</action>
		
		<action name="default">
			<result>/index.jsp</result>
		</action>
	</package>
</struts>


二、方法一:Action类中直接写user的属性及其对应的get和set方法,接收到参数后输出显示

UserAction.java文件:

package org.Test.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	private String userName;
	private String password;
	private int age;

	public String getUserName() {
		System.out.println("getUserName");
		return userName;
	}

	public void setUserName(String userName) {
		System.out.println("setUserName");
		this.userName = userName;
	}

	public String getPassword() {
		System.out.println("getPassword");
		return password;
	}

	public void setPassword(String password) {
		System.out.println("setPassword");
		this.password = password;
	}

	public int getAge() {
		System.out.println("getAge");
		return age;
	}

	public void setAge(int age) {
		System.out.println("setAge");
		this.age = age;
	}

	public String login() {
		System.out.println("userAction:login");
		System.out.println("userName:" + userName);
		System.out.println("password:" + password);
		System.out.println("age:" + age);
		return SUCCESS;
	}
}


index.jsp页面

<body>
	<center>
		<form action="user_login" method="post">
			<table>
				<tr>
					<td>用户名:</td>
					<td><input type="text" name="userName"></td>
				</tr>
				<tr>
					<td>密码:</td>
					<td><input type="password" name="password"></td>
				</tr>
				<tr>
					<td>年龄:</td>
					<td><input type="text" name="age"></td>
				</tr>
				<tr>
					<td></td>
					<td align="left"><input type="submit" value="登录"> <input
						type="reset" value="重置">
				</tr>
			</table>
		</form>
	</center>
</body>


success.jsp页面:

<body>
	登陆成功
	<br>
</body>


运行结果:







说明:

1.index.jsp页面:输入框的name属性,用户名---name="userName",密码---name="password",年龄---name="age"。

2.UserAction中必须有属性(userName,password,age)的get和set方法

3.输出结果说明程序调用了三个属性的set方法,同时UserAction也成功获得了JSP页面传过来的属性的值

三、方法二:另外定义User类并设置其属性的get和set方法,同时将user作为UserAction的内置对象,同时index.jsp页面输入框的name属性的值变为user.属性

User.java文件:

package org.Test.entity;

public class User {
	private String userName;
	private String password;
	private int age;

	public int getAge() {
		System.out.println("User:getAge");
		return age;
	}

	public void setAge(int age) {
		System.out.println("User:setAge");
		this.age = age;
	}

	public String getUserName() {
		System.out.println("User:getUserName");
		return userName;
	}

	public void setUserName(String userName) {
		System.out.println("User:setUserName");
		this.userName = userName;
	}

	public String getPassword() {
		System.out.println("User:getPassword");
		return password;
	}

	public void setPassword(String password) {
		System.out.println("User:setPassword");
		this.password = password;
	}

}


UserAction.java文件:

package org.Test.action;

import org.Test.entity.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	private User user;

	public User getUser() {
		System.out.println("UserAction:getUser	" + user);
		return user;
	}

	public void setUser(User user) {
		System.out.println("userAction:setUser	" + user);
		this.user = user;
	}

	public String login() {
		System.out.println("userAction:login");
		System.out.println("userName:" + user.getUserName());
		System.out.println("password:" + user.getPassword());
		System.out.println("age:" + user.getAge());
		return SUCCESS;
	}
}


index.jsp页面:

<body>
	<center>
		<form action="user_login" method="post">
			<table>
				<tr>
					<td>用户名:</td>
					<td><input type="text" name="user.userName"></td>
				</tr>
				<tr>
					<td>密码:</td>
					<td><input type="password" name="user.password"></td>
				</tr>
				<tr>
					<td>年龄:</td>
					<td><input type="text" name="user.age"></td>
				</tr>
				<tr>
					<td></td>
					<td align="left"><input type="submit" value="登录"> <input
						type="reset" value="重置">
				</tr>
			</table>
		</form>
	</center>
</body>


success.jsp页面:

<body>
	登陆成功
	<br>
</body>


运行结果:





说明:

1.index.jsp页面:输入框的name属性,用户名---name="user.userName",密码---name="user.password",年龄---name="user.age"。

2.UserAction中只需要有User类的一个对象及其对象的get和set方法,而User类本身需要有属性的set和get方法

3.输出结果分析:尝试得到一个user对象,为null——随即设置一个user(新建了一个user对象)——设置age属性——再次得到user,不为空——设置password属性——再次得到user,不为空——设置userName属性——执行login函数,输出user对象各个属性的值

四、实现ModelDriven接口,泛型指定User。通过getModel()方法获取User对象。

User.java文件:

package org.Test.entity;

public class User {
	private String userName;
	private String password;
	private int age;

	public int getAge() {
		System.out.println("User:getAge");
		return age;
	}

	public void setAge(int age) {
		System.out.println("User:setAge");
		this.age = age;
	}

	public String getUserName() {
		System.out.println("User:getUserName");
		return userName;
	}

	public void setUserName(String userName) {
		System.out.println("User:setUserName");
		this.userName = userName;
	}

	public String getPassword() {
		System.out.println("User:getPassword");
		return password;
	}

	public void setPassword(String password) {
		System.out.println("User:setPassword");
		this.password = password;
	}

}


UserAction.java文件:

package org.Test.action;

import org.Test.entity.User;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User> {   //实现ModelDriven接口,泛型指定User 
	private User user;

	@Override
	public User getModel() {   //此方法是Modeldriven接口的方法,要重写
		System.out.println("UserAction:getModel");
		
		if(this.user == null)
			this.user = new User();   //当前user的实例化由Action来负责
		
		return this.user;   //返回该user对象的引用
	}

	public String login() {
		System.out.println("userAction:login");
		System.out.println("userName:" + user.getUserName());
		System.out.println("password:" + user.getPassword());
		System.out.println("age:" + user.getAge());
		return SUCCESS;
	}

}


index.jsp页面

<body>
	<center>
		<form action="user_login" method="post">
			<table>
				<tr>
					<td>用户名:</td>
					<td><input type="text" name="userName"></td>
				</tr>
				<tr>
					<td>密码:</td>
					<td><input type="password" name="password"></td>
				</tr>
				<tr>
					<td>年龄:</td>
					<td><input type="text" name="age"></td>
				</tr>
				<tr>
					<td></td>
					<td align="left"><input type="submit" value="登录"> <input
						type="reset" value="重置">
				</tr>
			</table>
		</form>
	</center>
</body>


success.jsp页面:

<body>
	登陆成功
	<br>
</body>


运行结果:







说明:

1.index.jsp页面:输入框的name属性,用户名---name="userName",密码---name="password",年龄---name="age"。(在第二种方法上简化了JSP页面)

2.UserAction:必须有User对象,实现ModelDriven接口,重写getModel()方法

3.输出结果表示:先调用getModel()方法——实例化user——设置user的各项属性——调用login方法,输出各项属性值

五、一张图来理解传值过程:



说明:

1.流程:JSP页面向Action传user的属性值——struts2过滤过滤——反射机制寻找对应的user的方法——getUser(),为null——setUser(),新建user——设置age属性值,setAge()——再次得到user,getUser(),是同一个user——设置password属性值,setPassword()——依次进行……直到设置完所有的值

2.struts功能:过滤请求,类型转换(如age,String类型转换成int),对user操作(set和get)

以上是我作为初学者一点浅薄的理解,欢迎补充和指正,今后理解深入了,还会修改次博文!

参考链接:http://blog.csdn.net/li_tengfei/article/details/6098145
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: