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

来源:互联网 发布:php企业网站模板 编辑:程序博客网 时间:2024/05/17 06:59

一、以用户登录为例,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="登录"> <inputtype="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="登录"> <inputtype="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;@Overridepublic 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="登录"> <inputtype="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


1 0