讲解一下用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;
}
}
通过定义两个变量,age,name,实现get和set方法,完成调用。输入的值打印在控制台。
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;
}
在UserAction只定义一个user,user的属性放在User.java里,user就是一个域模型。在访问中访问http://localhost:8080/Struts2_0800_DomainModelParamInput/user!add?user.name=aaa&user.age=10
用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"> 就可以了。