接收参数的三种方法
一.通过action的属性接收参数
public class UserAction extends ActionSupport {
private String name;
private int age;
public String add() {
System.out.println("name=" + name);
System.out.println("age=" + age);
return SUCCESS;
}
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;
}
}
我们在action中设置与请求参数同名的属性,核心控制器会主动调用该action相应的setXXX进行相关设置请求的路径类似于.../servletContextPath/namespace/user?name=aaa&age=5
二.通过Domain Model接收参数
public class User {
private String name;
private int age;
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 class UserAction extends ActionSupport {
private User user;
private String nickname;
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
System.out.println("nickname=" + nickname);
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setNickname(String nickname){
this.nickname = nickname;
}
public String getNickname(){
return nickname;
}
}
我们先看与之相关的请求页面的格式.../servletContextPath/namespace/user?user.name=aaa&user.age&nickname
与第一种方法不同的是,我们在action中直接使用了User对象,在查询字符串中是以user.name这种形式给出域模型(Domain Model)User的属性值。核心控制器检查到这种形式也会创建action并对齐属性进行响应的设置。
三.通过Model Driver接收参数
public class User {
private String name;
private int age;
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 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() {
return user;
}
}
访问格式:.../servletContextPath/namespace/user?name=aaa&age=5,我们看到这种形式与第一种形式是一样的。
注意到他的两个重要操作:1.action类对ModelDriven<?>的实现,这里需要指定它的泛型类型2.在重写的方法中返回需要进行设置的user对象,在User类中写好setXXX和getXXX方法
核心控制器的操作流程大致是:1.创建action业务控制器2.通过getModel()得到user对象3.调用user的setXXX方法设置其属性值.
值得一提的是,核心控制器不会再创建User对象,因此我们必须在action中创建,如上user=new User();