实现这两个接口ModelDriven<T>,Preparable有什么用?

      实现了ModelDriven就必须实现getModel这个方法,该方法返回的是你的ModelDrivern泛型中设定的实体类。其实是为了实现代码的重用,不要再定义一次你在数据访问层定义的属性了,直接用那个类就行了。不过有时候也不是很需要这个东西,比如只有一两个表单域的时候。

      Struts2的Action在实现com.opensymphony.xwork2.Preparable接口后,就可以重写prepare()方法,此时在Action中,prepare()方法的执行点是在:setXxx()和execute()的执行之前。如果action针对每次请求都要执行一些相同的业务逻辑, 那么可以实现Preparable接口, 将预处理业务逻辑写在prepare()方法里。

比如需求:

     在执行Action的方法前,接收前台隐藏域传过来的值,再根据该值执行相应逻辑,如前台传过来ID,我们根据ID查找数据库对应的用户信息,再跳转到modify()中修改信息,但实际的运行过程中发现,通过Debug断点调试得知prepare()方法接收到的ID值是零,即前台隐藏域中的ID值没有传过来。

     事实上问题就出在默认的defaultStack拦截器栈上。其实defaultStack无法接收prepare()需要的数据,而应借助paramsPrepareParamsStack拦截器栈,事实上使用prepare拦截器之前,应先调用params拦截器,prepare()才能接收到表单数据。基于这个思路,于是可以通过各种手段将params拦截器放置在prepare拦截器之前即可。比如将defaultStack中的所有拦截器拷贝到struts.xml的我们自定义的myStack拦截器栈中,再按照paramsPrepareParamsStack拦截器栈中的params和prepare顺序修改二者位置即可。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值