11-模型驱动ModelDriven的使用

所谓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

所以说白了 模型驱动也就是把表单的字段和模型对象的字段进行绑定。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注