讲解一下用Struts2接收参数的三种方法。
1.用Action的属性接收。
访问http://localhost:8080/Struts2_0700_ActionAttrParamInput/user!add?name=sss&age=10
访问user action的add 方法传入name=sss和age=10.
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.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="user" class="com.tfj.struts2.action.UserAction" > <result> /addsuccess.jsp </result> </action> </package> </struts>调用com.tfj.struts2.action的UserAction类。
UserAction.java
package com.tfj.struts2.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } private int age; public String add(){ System.out.println("name="+name); System.out.println("age="+age); return SUCCESS; } }
2.用DomainModel接收。
DomainModel是域模型的意思。
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.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="user" class="com.tfj.struts2.action.UserAction">
<result>
/addsuccess.jsp
</result>
</action>
</package>
</struts>
UserAction.java
package com.tfj.struts2.action; import com.opensymphony.xwork2.ActionSupport; import com.tfj.struts2.user.User; public class UserAction extends ActionSupport{ public User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String add(){ System.out.println("name="+user.getName()); System.out.println("age="+user.getAge()); return SUCCESS; } }User.java
package com.tfj.struts2.user; public class User { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int age; }
用user.name 和user.age来传递参数。
不过有的时候需要传递的参数并不是user的属性,例如在网页注册的时候,我们经常看到密码的建立框和密码的确认框,那么这个时候,确认框里的内容并不是user的参数。这个是后我们就要用到DTO,简单的说先用DTO接受参数,在把需要的参数传递给user建立一个user对象。
3.用ModelDriven来接受参数。
虽然ModelDriven并不常用但是它代表了一种MVC的思想还是很有必要了解一下的。
UserAction.java
package com.tfj.struts2.action; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.tfj.struts2.user.User; public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); public String add(){ System.out.println("name="+user.getName()); System.out.println("age="+user.getAge()); return SUCCESS; } @Override public User getModel() { // TODO Auto-generated method stub return user; } }访问http://localhost:8080/Struts2_0900_ModelDrivenParamInput/user!add?name=aaa&age=10
不需要用user.name。在这个类实现了ModelDriven<User>接口,实现getModel()方法,区别是要自己创建一个user对象。过程如下图。
当需要传递中文时候需要在struts.xml配置<constant name="struts.i18n.encoding" value="GBK"> 就可以了。