`
lingcm
  • 浏览: 19720 次
社区版块
存档分类
最新评论

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中,这样当然不太合理。但有更合适的方法吗?
分享到:
评论

相关推荐

    StrutsCatalogLazyList

    1. **预初始化列表**:在ActionForm初始化时预填充一个空的列表。这样,在用户添加新的元素时就不会出现索引错误。 ```java public class SkillsForm extends ActionForm { private List&lt;String&gt; skills = new ...

    ActionForm里的get和set方法

    一个ActionForm实例的生命周期通常包括创建、初始化、填充、处理、销毁几个阶段。在请求处理过程中,Struts框架可能会复用ActionForm对象以提高性能,这就要求开发者在处理完一次请求后,正确清理ActionForm的状态...

    struts的form不能初始化java.util.Date类型

    6. **默认值设置**:在ActionForm的初始化方法中,可以为Date类型的字段设定一个默认值,以防用户没有提供日期数据。 了解并掌握这些策略,可以帮助开发者在遇到“Struts的form不能初始化`java.util.Date`类型”...

    struts com-init

    在初始化过程中,ActionForm的实例可能会被创建和初始化。 5. **ActionMapping**:它定义了HTTP请求与Action之间的映射关系。初始化时,ActionMapping会根据配置文件解析并构建映射集合。 6. **Tiles**:如果应用...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    然后在Spring配置文件中,使用`factory-method`指定setter方法,并通过`depends-on`确保被依赖的对象在ActionForm之前被初始化: ```xml ``` 这种方法使得Spring可以通过调用静态setter方法来注入依赖,从而...

    ActionForm属性中存在对象数组如何处理

    2. 在ActionForm中声明对象数组属性,并重写`reset`方法以初始化数组。 3. 在JSP页面中动态创建表单,使用数组索引引用对象属性。 4. 在Action类中从ActionForm中获取对象数组,并进行进一步处理。 通过这种方式,...

    ValidatorActionForm,ValidatorForm和ActionForm.区别

    - **reset()**:该方法主要用于清除表单对象中的数据,常在每次请求处理前调用,确保表单对象处于初始状态。 - **validate()**:该方法用于验证表单数据的有效性,返回一个 `ActionErrors` 对象,该对象包含了所有...

    Struts2框架ActionForm自动填充表单

    此外,Struts2还提供了`PrepareInterceptor`,它会在Action执行前调用`prepare()`方法,如果你在Action类中实现了这个方法,可以在这里进一步初始化模型对象,比如设置默认值或者进行预处理操作。 Struts2的这种...

    Struts1源码解析

    ActionServlet是Struts1的核心组件,它的生命周期分为初始化、拦截请求和销毁三个阶段。在初始化阶段,`init()`方法执行了一系列关键步骤: 1. `initInternal()`方法初始化内部资源,如国际化设置。它包含了英文和...

    java笔试题最新最好,最全面

    - **初始化过程**:ActionServlet在首次接收到请求时会读取`struts-config.xml`文件进行初始化工作。这一过程包括加载配置信息、创建和注册Action映射等。 - **请求分发**:ActionServlet通过解析请求URL来确定需要...

    Structs培训.doc

    1. **初始化**:在Web应用启动时,Structs框架加载并初始化`ActionServlet`。这个Servlet是Structs的核心组件,负责整个应用的控制流程。 2. **配置读取**:`ActionServlet`会从`structs-config.xml`配置文件中读取...

    北京大部分公司的ssh面试题

    MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单...

    struts应用举例2

    2. web.xml:部署描述符,配置Struts的初始化参数,如ActionServlet的映射和初始化参数。 四、Struts工作流程 1. 用户发送HTTP请求到服务器。 2. ActionServlet拦截请求,解析请求路径,根据struts-config.xml中的...

    struts1面试题

    当基于Struts1的Web应用启动时,会加载并初始化`ActionServlet`,它是Struts框架的控制器。`ActionServlet`从`struts-config.xml`配置文件中读取相关信息,比如Action、ActionMapping和ActionForward的定义,并将...

    struts-原理.

    具体来说,`init()`方法会读取`config`初始化参数,该参数指向`struts-config.xml`文件的路径。框架会解析此文件,创建一个映射表(`actionsMap`),其中URL路径作为键,对应的Action映射(`ActionMapping`)作为值...

    Struts视图组件详解附源代码

    ActionForm的生命周期包括了初始化、填充(当请求参数映射到字段)、验证和清理四个阶段。在使用ActionForm时,我们需要注意属性的定义、表单的绑定、以及错误消息的处理。 ActionForm有多种用法,例如: 1. **...

    Struts 源码学习之ActionServlet

    - `&lt;init-param&gt;`元素用于配置初始化参数,这里指定了两个配置文件:`/WEB-INF/struts-config.xml`和`/WEB-INF/struts-config-Wildcard.xml`,这些文件包含了Struts应用的配置信息。 - `&lt;load-on-startup&gt;`属性指定...

    struts工作原理

    当Web服务器启动时,根据`web.xml`配置文件,ActionServlet(Struts的总控制器)被加载并初始化。ActionServlet会读取`struts-config.xml`配置文件,从中获取模块配置信息,如ActionConfig、ControlConfig、...

    java面试知识点总结--Struts.pdf

    当Web应用启动时,Struts的核心控制器`ActionServlet`被加载并初始化。它会解析`struts-config.xml`配置文件,从中提取ActionMappings信息,并存储到内存中。`ActionServlet`是Controller层的主要组件,负责协调...

Global site tag (gtag.js) - Google Analytics