Java Web开发之:ModelDriven

ModelDriven 的好处时,可以将网页提交的数据转换为 类对象。ModelDriven为模板类,模板参数即为转换的类对象的类型。

例如:要在网页上输入:姓名、年龄、地址、电话。并提交到服务器。我们定义类UserModel,来存储这些数据。UserModel即为模板类ModelDriven的模板参数。映射关系如下:





1. 首先定义一个页面index.jsp,让用户输入信息,并提交到服务器。

<%--index.jsp --%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

<pre name="code" class="javascript"><pre name="code" class="javascript"><%--注意要包含此标签库 --%>
<%@ taglib prefix="s" uri="/struts-tags" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
	<center>
		<s:form action="user">
			<s:textfield label="Name" name="name" />
			<s:textfield label="Age" name="age" /> 
			<s:textfield label="Phone" name="phone" />
			<s:textfield label="Address" name="address" />
			<s:submit />
		</s:form>
	</center>
</body>
</html>

 
 
 
 

2. 定义类UserModel

package com.action;

public class UserModel {
    private String m_name;
    private String m_age;
    private String m_address;
    private String m_phone;

    public String getName () {return this.m_name;    }
    public void setName (String n) { this.m_name = n; }
    
    // 注意这里的方法名,要与 index.jsp中 <s:textfield label="Age" name="age" /> 中name后面的名字一致. 
    // 例如,jsp文件中的name后为age,所以这里的方法名为:setAge和getAge 。其它的输入项的处理与此类似
    public String getAge () { return this.m_age; }  
    public void setAge (String a) { this.m_age = a; }
    
    public String getAddress () { return this.m_address; }
    public void setAddress (String a) { this.m_address = a; }
    
    public String getPhone () { return this.m_phone; }
    public void setPhone (String p) { this.m_phone = p; }
}

3. 实现 ModelDriven

package com.action;

import com.action.UserModel;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;


public class LoginAction extends ActionSupport implements ModelDriven<UserModel> {
	private static final long serialVersionUID = 1L;
	
	private UserModel m_userModel = new UserModel ();
	// 注意必须实现此方法。 struts框架会调用此方法获取对象,并调用对应的方法(例如:setAge)保存输入的参数信息。
	public UserModel getModel () {
		return this.m_userModel;
	}
	
	public String execute () throws Exception {
		
		ActionContext context = ActionContext.getContext();
		
		// 这里的user与success.jsp中的user对应。设置此的目的在于,在于在success.jsp页面中,可以根据user获取对象,并显示数据。
		context.put("user", this.m_userModel);
		
		return SUCCESS;
	}
}

4. 定义结果展示页面success.jsp

<%--success.jsp --%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <center>
        <s:property value="#user.name" /><br/> <%--注意这里name只能小写,类方法名要大写 --%>
        <s:property value="#user.age" /><br/>
        <s:property value="#user.phone" /><br/>
        <s:property value="#user.address" /><br/>
    </center>

</body>
</html>

5. 另外,还需要配置web.xml  与struts.xml文件。

Struts框架是基于过滤器实现的,因此需要在web.xml中配置过滤器。主要是配置过滤器的名字,以及过滤器名字对应的URL信息。核心配置如下:

<filter>
  	<filter-name>Struts2</filter-name> 
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>Struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

struts.xml文件主要是配置哪个一个action由哪个类处理。处理后的结果显示到哪儿。 核心配置如下:

<package name="default" namespace="/" extends="struts-default">

        <action name="user" class="com.action.LoginAction">
            <result name="success">/success.jsp</result>
        </action>

    </package>
核心的配置是说在/空间下,存在一个名为user的action(在index.jsp中已经标明其action为user)。此action由类com.action.LoginAction处理。此类为前面实现ModelDriven时的类。 处理结果由success.jsp显示。


猜你喜欢

转载自blog.csdn.net/lijing_lj928/article/details/46941685