ActionForm 初始化

如果一个action-mapping映射如下:

<action path="/admin/prepareToMoveForum"
type="com.jaqsoft.jaqforums.actions.admin.PrepareToMoveForumAction">
</action>

那么当ActionServlet将请求发送传递给prepareToMoveForum的时候,是不构建ActionForm的,
也就是说,PrepareToMoveForumAction类中的:

public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response);
throws Exception {

form参数将是一个空的引用。

如果将映射文件改为:

<action path="/admin/prepareToMoveForum"
name="prepareToMoveForumForm"
type="com.jaqsoft.jaqforums.actions.admin.PrepareToMoveForumAction">
</action>

那么,当PrepareToMoveForumAction的时候是,会先从pageContext中查看有否prepareToMoveForumForm的对象,
如果没有,他将创建一个新的实例,然后调用此实例的validate方法,如果出现问题,那么,他调用ActionMapping.getInput(),
如果此时没有配置input选项,那么将抛出异常。因此,input选项存在的价值是:当validate没有通过的时候告诉ActionServlet
应该返回到哪个页面,这也就是为什么我必须为prepareToUpdateForumAction的prepareToUpdateForumForm配置input属性的原因,
因为,这个ActionForm中的属性的缺省值是不能通过validate的。

那么,现在要让,
 
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response);
throws Exception {

不返回一个空的form,只要让ActionForm的validate方法通过即可。
这样很容易办到,让validate方法为空,或者让有要求的属性赋初始值即可。

=============================
以上的方法会带来一个新的问题:完全可以构造一个不满足validate的
一组数据,来填充这个formbean,一旦这个formbean被缓存之后,将随时
有抛出No input attribute的异常。解决这个问题有个不合适的方法:
将验证写到action中,这样当然不太合理。但有更合适的方法吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值