在Stuts2中使用ModelDriven action

  在Struts2中,提供了另外一种直接使用领域对象的方式,那就是让action实现com.opensymphony.xwork2.ModelDriven接口。ModelDriven让你可以直接操作应用程序中的领域对象,允许你在Web层和业务逻辑层使用相同的对象。

  ModelDiven接口中只有一个方法,如下

  public T getModel();

  该方法返回一个接受用户输入数据的对象模型。在页面中,这个模型对象中的属性可以直接通过对象名来访问,嗯不需要使用user.name来访问,在action类中,也不需要为这个对象提供getter和setter方法。

  代码如下:

 

package action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import entity.User;


public class Model implements Action,ModelDriven<User> {
    private User user=new User();
    @Override
    public User getModel() {
        return user;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}

 

实体类:

package entity;
public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

  首先还是老样子,创建一个login.jsp,登陆后经过Stuts2的拦截器,找到并进入自定义的实现了action接口和ModelDriven接口的Model类

返回SUCCESS,在stuts.xml中定向到success.jsp页面。

在success.jsp页面中,我们只需要如下定义,就可以实现原有功能

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<s:debug></s:debug>
<s:fielderror></s:fielderror>
Hello   <s:property value="name"/>
<s:iterator value="list" id="str">
    <s:property value="str"/>
</s:iterator>

</body>
</html>

登陆后的效果如下

那么什么时候应该使用领域对象,什么时候应该实现ModelDriven接口呢?这两种方式其实实际上没有本质的差别,对于大多数的应用,使用任何一种方式都可以。

 

posted on 2017-02-28 21:25  癫疯神剑  阅读(185)  评论(0编辑  收藏  举报