DTO在STRUTS2的应用是从页面直接传递一个对象(比方自己写的类)到Action
JSP仅仅能传递基本类型,STRUTS的DTO更方便
两种用法:
一、假设表单中,各个属性都声明了实例的名字
<form action="w.action" method = "post">
姓名:<input name="w.name" type="text" value="admin"/><br/>
ID:<input name="w.id" type="password" value="hellow" ><br/>
<input type="submit" value="add"/>
</form>
按下面步骤:
Action的java文件里须要实例化。如果实例名字为w。那么相应的struts.xml中的Action名字也必须是w。当然也要与表单的w一样
struts.xml
<action name="w" class="com.m2dto.action.WorkerAction" >
<result name="success">
/ok.jsp
</result>
</action>
Action.java
public class WorkerAction extends ActionSupport {
Worker w = new Worker();
public Worker getW() {
return w;
}
public void setW(Worker w) {
this.w = w;
}
@Override
public String execute() throws Exception {
System.out.println(w.getName());
System.out.println(w.getId());
return SUCCESS;
}
}
二、假设表单中。各个属性没有声明实例的名字 。例如以下
<form action="u.action" method = "post">
User姓名:<input name="name" type="text" value="admin"/><br/>
UserID:<input name="id" type="password" value="hellow" ><br/>
<input type="submit" value="add"/>
</form>
那么action的java类除了须要extends actionsupport还须要implements ModelDriven<T>
T就是action须要接受的类的类型
除此之外,还须要:
(1)定义实例,并加上get set方法
(2)加上override getModel方法
例如以下样例:
public class AddUser extends ActionSupport implements ModelDriven<Worker> {
private Worker u = new Worker();
@Override
public Worker getModel() {
if(u == null){
u = new Worker();
}
return u;
}
public Worker getU() {
return u;
}
public void setU(Worker u) {
this.u = u;
}
@Override
public String execute() throws Exception {
System.out.println("user" + u.getName());
System.out.println("user" + u.getId());
return SUCCESS;
}
}