所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象。
ModelDriven要使用泛型
模型驱动的Action必须实现ModelDriven接口,而且要提供相应的泛型
实现ModelDriven的getModel方法,其实就是简单的返回泛型的一个对象
相对于属性驱动模式,模型驱动模式的好处不言而喻,它使得Action代码更加简洁,让我们的Action更加专注于是控制业务逻辑。但是任何事物都没有绝对的好坏之分,当Model中没有封装我们需要的个别特殊属性时,还是需要使用属性驱动模式,所以实际项目中一般会交叉应用。
//必须实现ModelDriven泛型对象
public class CategoryAction extends ActionSupport implements ModelDriven<CategoryModel>{
//必须是new对象的
private CategoryModel categoryModel = new CategoryModel();
//必须重写这个方法 并且这个方法是getModel不是其他名称
@Override
public CategoryModel getModel() {
return categoryModel;
}
public String index(){
return "index";
}
public String add(){
System.out.println("ID:"+categoryModel.getId());
System.out.println("NAME:"+categoryModel.getName());
return "add";
}
public String del(){
return "del";
}
}Code language: PHP (php)
然后在视图中可以这样来指定表单的 当然我们现在还没有用到表单这一块。
<s:textfield name="name" />Code language: HTML, XML (xml)
当然也需要先声明struts标签
<%@ taglib prefix="s" uri="/struts-tags" %>Code language: HTML, XML (xml)
另外还可以和属性驱动混合使用 比如有一个intro的字段 这个字段在categoryModel类里面没有定义的。那么我们可以在action类中增加这个字段。
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
private String intro;Code language: JavaScript (javascript)
然后视图中访问
<s:property value="intro" />Code language: HTML, XML (xml)
我们请求的地址如下
http://p50:8080/Struct11Demo/admin/Category_add?id=1&name=ddd&intro=number
所以说白了 模型驱动也就是把表单的字段和模型对象的字段进行绑定。
Previous: 10-模型绑定
Next: 12-显示参数错误信息