所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象。比如,有实体类User如下:
package cn.school.entity
public class Student { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } |
假如要写一个Action,用来添加User。
第一种做法是直接在Action中定义所有需要的属性,然后在JSP中直接用属性名称来提交数据:
Student Action:
public class StudentAction { private String username; public String add(){ Student sudent= new Student(); sudent.setUsername(username); new UserManager().addUser(user); return "success"; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } |
add_input.jsp:
<form action="student.action" method="post"> <input type="hidden" name="method:add"> username:<input type="text" name="username"> <br/> <input type="submit" name="submit" value="添加用户"> </form> <br/> |
上述做法不好之处是:如果实体类的属性非常多,那么Action中也要定义相同的属性。
第二种做法是将Student对象定义到StudentAction中,然后在JSP中通过user属性来给user赋值:
StudentAction:
public class StudentAction {
private Student student;
public String add(){
new UserManager().addUser(user);
return "success"; }
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
} |
add_input.jsp:
<form action="student.action" method="post"> <input type="hidden" name="method:add"> username:<input type="text" name="student.username"> <br/> <input type="submit" name="submit" value="添加用户"> </form> <br/> |
这种做法不好的地方是:JSP页面上表单域中的命名变得太长
第三种做法是利用ModelDriven机制,让UserAction实现一个ModelDriven接口,同时实现接口中的方法:getModel()。如下所示:
public class StudentAction implements ModelDriven{
private Student student;
@Override public Object getModel() { if(student== null){ student= new Student (); } return student; }
public String add(){
new UserManager().addUser(user);
return "success"; } //set方法必须存在 public void setStudent(Student student) { this.student= student; } } |
JSP的代码如下:
<form action="student.action" method="post"> <input type="hidden" name="method:add"> username:<input type="text" name="username"> <br/> <input type="submit" name="submit" value="添加用户"> </form> <br/> |
可见,第三种做法是比较好的,Action和JSP写起来都比较简单。