现在的位置: 首页 > 综合 > 正文

ModelDriven和Preparable

2014年06月28日 ⁄ 综合 ⁄ 共 3273字 ⁄ 字号 评论关闭

一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性 对应。


二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将Object getModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似 Struts的FormBean功能。

action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven可以直接操作应用程序中的领域对象,允许在web层和业务层使用相同的对象。
ModelDriven接口只有一个方法
        public Object getModel() {

                    return null;

        }


三、Preparable

prepare方法由PrepareInterceptor拦截器调用执行。

流程:

1. params拦截器首先给action中的相关参数赋值,如id 
2. prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象 3. modelDriven拦截器将model对象压入value stack,这里的model对象就是在prepare中创建的 4. params拦截器再将参数赋值给model对象 5. action的业务逻辑执行 依据此stack 

综合案例说明:

User.java

package model;

public class User {
	private int id;
    private String name;
    private String pass;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
    
}


LoginAction.java

package action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import model.User;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class LoginAction extends ActionSupport implements ModelDriven<User>,
		Preparable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private User user = new User();
	private int id;

	public String Login() {

		System.out.println("Login==================");
		if (user.getName().equals("123") && user.getPass().equals("csdn")) {
			System.out.println(user.getId() + "@@@@");
			System.out.println(user.getName() + "@@@@");
			return SUCCESS;
		}

		return INPUT;
	}

	public String add() {
		return SUCCESS;
	}

	public String delete() {
		return SUCCESS;
	}

	public String index() {
		return SUCCESS;
	}

	@Override
	public User getModel() {
		System.out.println("getModel==================");
		System.out.println(user.getId() + "????");
		System.out.println(user.getName() + "????");
		return user;
	}

	@Override
	public void prepare() throws Exception {
		System.out.println("prepare==================");

		HttpServletRequest request = ServletActionContext.getRequest();

		String id = request.getParameter("id").toString();

		System.out.println(id + "&&&&&&&&&");

		user.setId(1234);
		user.setName("22222");
		System.out.println(user.getId() + "****");
		System.out.println(user.getName() + "****");
		System.out.println("!!!!!!!");

	}
/*
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
*/
}


login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>My JSP 'login.jsp' starting page</title>


</head>

<body>
	<!-- struts2标签 -->
	<s:form action="/hello/login" method="post">
		<s:textfield name="id" label="编号" />
		<s:textfield name="name" label="用户名" />
		<s:password name="pass" label="密码 " />
		<s:submit />
	</s:form>
</body>
</html>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<package name="hello" namespace="/hello" extends="struts-default">
		<action name="login" class="action.LoginAction" method="Login">
			<result name="success">
				/index.jsp
			</result>
			<result name="input">/login.jsp</result>
		</action>
	</package>
</struts>

抱歉!评论已关闭.