在学习Struts2框架Action获取参数时,教程中使用了Lombok包,用注释加了Setter和Getter方法。因为对Lombok备注使用不熟练,导致一直无法正确地创建域模型对象。
然后使用最基本的方法。
创建域模型User类
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
然后在Action中创建域模型的对象,并设置其Getter和Setter方法,过滤器会自动调用该对象的Getter和Setter方法。
public class Atitem2Action extends ActionSupport{
private static final long serialVersionUID = 1L;
private User u;
public User getU() {
return u;
}
public void setU(User u) {
this.u = u;
}
public String execute() throws Exception {
System.out.println(u.toString());
return SUCCESS;
}
然后在JSP页面的表单中带上该对象名
<form action="/HelloStruts2/d02/acitem2" method="GET">
用户:<input type="text" id="username" name="u.username"><br/>
密码:<input type="password" id="password" name="u.password"><br>
<input type="submit" id="tj" value="提交">
</form>
全过程的思想就是在Action中创建一个对象,在收到请求后,根据请求带过来的对象名和属性名,由过滤器调用对象的Getter和Setter 方法,实现参数的自动封装
附注:域模型驱动,通过实现ModelDriven接口
private User u = new User();
public String execute() throws Exception {
System.out.println(u.toString());
return SUCCESS;
}
@Override
public User getModel() {
return u;
}
此种方式会把对象和参数封装到请求中,在后边的JSP页面中可以通过${username}拿到数据