对于模型驱动,使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需
要定义一个封装所有数据信息的javabean
所属的Action需要实现ModelDriven接口,并且给定类型和实现接口中的getModel方法
需要一个封装所有属性的javabean
从下面的小例子中可以看出Struts2的MVC模式,C相当于UserAction,M相当于User(一个JavaBean),V就是jsp界面(也可以是其他界面)将Model和View的耦合度降低!!!
下面来看一下结构和代码:
UserAction.java的代码是:
package com.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.struts2.user.model.User;
public class UserAction extends ActionSupport implements ModelDriven<User/*这里需要填写User对象*/>{
private User user = new User();
//定义User对象用于承载getModel()方法返回的数据信息
//同时这里必须实例化对象,否则user的对象会为空
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
//重写ModleDriven的方法,返回定义的person对象
return user;
}
}
User.java的代码是:
package com.struts2.user.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;
}
}
Struts.xml代码是:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
index.jsp中body中的代码:直接传过去name和age,将这个传给一个名字为user的namespace下面的一个名字为user的action,然后调用action中class中的add方法!!,名字必须一致!!!否则会出错!!
<body>
使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a>
</body>