Struts2的模型驱动和属性驱动

Struts2环境搭建成功后,最起码的要求是能实现对数据的增删改查,然而这就涉及到了如何将前台数据传入到我们后台中,简单说如何将页面的数据传到处理程序中,以及如何把数据库中的数据显示在jsp中,想要实现这些功能,首先要了解Struts2的驱动方式。

属性驱动:使用属性来封装来回请求参数和处理结果,即在jsp页面的每一个form中的name都对应在action中有一个属性与之对应。


如果在jsp页面表单中的数据很多的时候,属性驱动的action类中需要写很多的属性和对应的set和get方法,影响action中主要流程的可读性,所以将和表单对应的属性放到专门的javabean中,形成实体类。


模型驱动:使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需要定义一个封装所有数据信息的javabean


这里主要分析Struts2的模型驱动。


Struts2是如何将请求参数封装到model中的呢?查看struts-default.xml配置文件,看到如下片段:

<interceptors>
       ……
       <!--定义属性驱动的拦截器—>
       <interceptor name=”params” class=”com.opensymphony.xwork2.interceptor.ParametersInterceptor” />
       <!--定义模型驱动的拦截器—>
<interceptor name=”model-driven”  class=”com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor” />
       ……
       <!--定义模型驱动的拦截器栈—>
       <interceptor-stack name=”modelDrivenStack”>
              <interceptor-ref name=”model-driven”/>
              <interceptor-ref name=”basicStack”/>
       </interceptor-stack>
……
       <interceptor-stack name=”defaultStack”>
              <interceptor-ref name=”model-driven”/>
              <interceptor-ref name=”params”/>
       </interceptor-stack>
</interceptors>
<!--定义Struts2默认的拦截器栈—>
<default-interceptor-ref name=”defaultStack” />

上面的配置片段中配置了系统默认的拦截器栈,它包含了两个拦截器引用:ModelDriven和params,这两个拦截器引用又对应系统中的ModelDriven和params拦截器。其中params拦截器负责提取请求参数,如果使用属性驱动模式,则还负责将请求参数传给Action实例的属性,而ModelDriven拦截器则负责将请求参数传给模型的属性。


模式驱动代码实例:


javaBean类


package com.test.dao;
public class User {
	private String name;
	private String password;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

Action类


package com.test.action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.test.dao.User;
//采用模型驱动的Action必须实现ModelDriven接口
public class LoginAction implements Action,ModelDriven<User>{
	//定义用于封装请求参数和处理结果的模型
	private User model=new User();
	//处理用户请求的execute方法
	public String execute() throws Exception {
		//当用户请求参数的name等于admin,密码请求参数为123456时
		//返回success字符串,否则返回error
		if(getModel().getName().equals("admin")&&
				getModel().getPassword().equals("123456")){
			return SUCCESS;
		}else{
			return ERROR;
		}
	}
	//实现ModelDriven接口必须实现的方法
	//该方法用于把Action和与之对应的Model实例关联起来
	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return model;
	}
}


struts.xml配置


<?xml version="1.0" encoding="GBK"?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
    "http://struts.apache.org/dtds/struts-2.3.dtd">  
<!-- 配置struts2的配置文件的根元素 -->  
<struts>
    <!-- Struts2的Action必须放在指定的包空间下定义 -->  
    <package name="test" extends="struts-default">
    <!-- 定义login的Action -->
        <action name="login" class="com.test.action.LoginAction">  
<!--             定义处理结果和视图资源之间的映射关系 -->
            <result>error.jsp</result>  
            <result>welcome.jsp</result>  
        </action>
    </package>
</struts>


登录页面login.jsp


<body>
	<form action="login" method="post">
		<table>
			<caption>
				<h3>用户登录</h3>
			</caption>
			<tr>
				<td>用户名:<input type="text" name="name" /></td>
			</tr>
			<tr>
				<td>密码:<input type="password" name="password" /></td>
			</tr>
			<tr align="center">
				<td colspan="2"><input type="submit" value="登录" /> <input
					type="reset" value="重填" /></td>
			</tr>
		</table>
	</form>
</body>


登录成功页面


<body>
欢迎,<s:property value="model.name"/>,您已经登录!
</body>

当采用模型驱动模式时,也可以采用如下形式来输出Action属性。
<s:property value="name"/>






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值