SSH整合中为获取表单对象Action类实现的接口及拦截器配置

保存员工或者用户信息时,以员工为例,是通过表单收集信息的,需要把这些信息赋给一个对象,然后保存到数据库中。对应的Action类须实现Preparable接口及ModelDriven接口,且在Action类中需要一个Employee model全局变量,getter、setter方法。一个prepareSave()方法。具体代码如下:

import com.atguigu.entities.Employee;
import com.atguigu.service.EmployeeService;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class EmployeeAction implements ModelDriven<Employee>, Preparable {
	private EmployeeService employeeService;

	public EmployeeService getEmployeeService() {
		return employeeService;
	}

	public void setEmployeeService(EmployeeService employeeService) {
		this.employeeService = employeeService;
	}

	public String save() throws Exception {
		System.out.println(model);
		employeeService.save(model);
		return "success";
	}

	private Employee model;

	public void setModel(Employee model) {
		this.model = model;
	}

	public void prepare() throws Exception {
	}

	public void prepareSave() throws Exception {
		model = new Employee();
	}

	@Override
	public Employee getModel() {
		return model;
	}
}
分析:代码中的prepare()方法是实现Preparable接口实现的,我们不用这个方法,清空方法体只保留大括号即可。void prepareSave() 方法是我们自己写的,只是新建一个实体对象并赋给全局变量model。getModel()方法是实现ModelDriven<Employee>接口实现的,返回值全局变量model。因为Action类实现了ModelDriven接口,ModelDrivenInterceptor拦截器会把getModel()方法的返回值也就是model放到值栈的栈顶。而ParamsInterceptor拦截器会把表单元素的值赋到栈顶对象对应的属性中,此时model对象即是表单元素封装的对象。

除此之外,还需配置PrepareI拦截器的一个参数alwaysInvokePrepare来禁止prepare()方法的调用,

<interceptors>
	<interceptor-stack name="MydefaultStack">
		<interceptor-ref name="defaultStack">
			<param name="prepare.alwaysInvokePrepare">false</param>
		</interceptor-ref>
	</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MydefaultStack"></default-interceptor-ref>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值