如果一个action-mapping映射如下:
那么当ActionServlet将请求发送传递给prepareToMoveForum的时候,是不构建ActionForm的,
也就是说,PrepareToMoveForumAction类中的:
form参数将是一个空的引用。
如果将映射文件改为:
那么,当PrepareToMoveForumAction的时候是,会先从pageContext中查看有否prepareToMoveForumForm的对象,
如果没有,他将创建一个新的实例,然后调用此实例的validate方法,如果出现问题,那么,他调用ActionMapping.getInput(),
如果此时没有配置input选项,那么将抛出异常。因此,input选项存在的价值是:当validate没有通过的时候告诉ActionServlet
应该返回到哪个页面,这也就是为什么我必须为prepareToUpdateForumAction的prepareToUpdateForumForm配置input属性的原因,
因为,这个ActionForm中的属性的缺省值是不能通过validate的。
那么,现在要让,
不返回一个空的form,只要让ActionForm的validate方法通过即可。
这样很容易办到,让validate方法为空,或者让有要求的属性赋初始值即可。
=============================
以上的方法会带来一个新的问题:完全可以构造一个不满足validate的
一组数据,来填充这个formbean,一旦这个formbean被缓存之后,将随时
有抛出No input attribute的异常。解决这个问题有个不合适的方法:
将验证写到action中,这样当然不太合理。但有更合适的方法吗?
<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中,这样当然不太合理。但有更合适的方法吗?