本文简要介绍struts2中Action的两种驱动方式:属性驱动和模型驱动。
属性驱动
在Action中提供与表单字段一一对应的属性,并一一赋值。采用属性驱动的方式时,是由每个属性来承载表单的字段值
举个栗子:
通过页面取值,通过form表单获得相应的属性(用户信息)。
user.jsp中代码
<form action="user/save" method="post">
用户名:<input type="text" name="user.username"><br/>
密码:<input type="password" name="user.pwd"><br/>
真实姓名:<input type="text" name="user.realname"><br/>
<input type="submit" value="保存">
<input type="button" value="返回" onclick="history.go(-1)">
</form>
struts.xml
<action name="save" class="com.nic.control.HelloWorld" method="save">
<!-- 返回页面,type:默认是dispatcher请求转发,重定向redirect -->
<result name="success" type="redirect">/index.jsp</result>
<result name="fail" type="redirect">/index.jsp</result>
</action>
HelloWorld.java类代码(用来测试,所以名字不够正经* 。*)
private Userbean user;
public String save(){
System.out.println("这是保存方法。。。");
System.out.println("username="+user.getUsername());
System.out.println("realname="+user.getRealname());
System.out.println("pwd="+user.getPwd());
//封装到对象,调用业务逻辑层 保存到数据库
return "success";
}
Userbean类就不贴出来了,里面就是属性,get,set方法~~
那么在jsp页面输入的数据会在控制台输出。
可以直接在类中写form表单中的几个属性,那么form表单中直接写属性,不用加user. 。这里直接在类中用JavaBean的方式,写一个JavaBean,然后生成get,set方法。
模型驱动
表单字段自动被set到一个JavaBean中,由模型对象来承载所有的属性值,使用时必须单独提供一个JavaBean。
使用模型驱动需要实现ModelDriven接口。
user.jsp
<body>
<form action="mctype/saveAction" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="pwd"><br/>
真实姓名:<input type="text" name="realname"><br/>
<input type="submit" value="保存">
<input type="button" value="返回" onclick="history.go(-1)">
</form>
public class UserAction implements ModelDriven<Userbean>{
private Userbean user=new Userbean();
public String save(){
System.out.println("这是保存方法。。。");
System.out.println("username="+user.getUsername());
System.out.println("realname="+user.getRealname());
System.out.println("pwd="+user.getPwd());
//封装到对象,调用业务逻辑层 保存到数据库
return "success";
}
public Userbean getUser(){
return user;
}
public void setUser(Userbean user){
this.user=user;
}
public Userbean getModel(){
return user;
}
}
此时在form表单中,name直接写属性即可。
Action类的执行流程是:首先调用getModel()方法得到User对象,接着根据JavaBean的原则将客户端传过来的属性,一个一个的set到User对象的属性中,将属性全部set完之后,再执行execute()方法。