如果一个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中,这样当然不太合理。但有更合适的方法吗?
分享到:
相关推荐
1. **预初始化列表**:在ActionForm初始化时预填充一个空的列表。这样,在用户添加新的元素时就不会出现索引错误。 ```java public class SkillsForm extends ActionForm { private List<String> skills = new ...
一个ActionForm实例的生命周期通常包括创建、初始化、填充、处理、销毁几个阶段。在请求处理过程中,Struts框架可能会复用ActionForm对象以提高性能,这就要求开发者在处理完一次请求后,正确清理ActionForm的状态...
6. **默认值设置**:在ActionForm的初始化方法中,可以为Date类型的字段设定一个默认值,以防用户没有提供日期数据。 了解并掌握这些策略,可以帮助开发者在遇到“Struts的form不能初始化`java.util.Date`类型”...
在初始化过程中,ActionForm的实例可能会被创建和初始化。 5. **ActionMapping**:它定义了HTTP请求与Action之间的映射关系。初始化时,ActionMapping会根据配置文件解析并构建映射集合。 6. **Tiles**:如果应用...
然后在Spring配置文件中,使用`factory-method`指定setter方法,并通过`depends-on`确保被依赖的对象在ActionForm之前被初始化: ```xml ``` 这种方法使得Spring可以通过调用静态setter方法来注入依赖,从而...
2. 在ActionForm中声明对象数组属性,并重写`reset`方法以初始化数组。 3. 在JSP页面中动态创建表单,使用数组索引引用对象属性。 4. 在Action类中从ActionForm中获取对象数组,并进行进一步处理。 通过这种方式,...
- **reset()**:该方法主要用于清除表单对象中的数据,常在每次请求处理前调用,确保表单对象处于初始状态。 - **validate()**:该方法用于验证表单数据的有效性,返回一个 `ActionErrors` 对象,该对象包含了所有...
此外,Struts2还提供了`PrepareInterceptor`,它会在Action执行前调用`prepare()`方法,如果你在Action类中实现了这个方法,可以在这里进一步初始化模型对象,比如设置默认值或者进行预处理操作。 Struts2的这种...
ActionServlet是Struts1的核心组件,它的生命周期分为初始化、拦截请求和销毁三个阶段。在初始化阶段,`init()`方法执行了一系列关键步骤: 1. `initInternal()`方法初始化内部资源,如国际化设置。它包含了英文和...
- **初始化过程**:ActionServlet在首次接收到请求时会读取`struts-config.xml`文件进行初始化工作。这一过程包括加载配置信息、创建和注册Action映射等。 - **请求分发**:ActionServlet通过解析请求URL来确定需要...
1. **初始化**:在Web应用启动时,Structs框架加载并初始化`ActionServlet`。这个Servlet是Structs的核心组件,负责整个应用的控制流程。 2. **配置读取**:`ActionServlet`会从`structs-config.xml`配置文件中读取...
MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单...
2. web.xml:部署描述符,配置Struts的初始化参数,如ActionServlet的映射和初始化参数。 四、Struts工作流程 1. 用户发送HTTP请求到服务器。 2. ActionServlet拦截请求,解析请求路径,根据struts-config.xml中的...
当基于Struts1的Web应用启动时,会加载并初始化`ActionServlet`,它是Struts框架的控制器。`ActionServlet`从`struts-config.xml`配置文件中读取相关信息,比如Action、ActionMapping和ActionForward的定义,并将...
具体来说,`init()`方法会读取`config`初始化参数,该参数指向`struts-config.xml`文件的路径。框架会解析此文件,创建一个映射表(`actionsMap`),其中URL路径作为键,对应的Action映射(`ActionMapping`)作为值...
ActionForm的生命周期包括了初始化、填充(当请求参数映射到字段)、验证和清理四个阶段。在使用ActionForm时,我们需要注意属性的定义、表单的绑定、以及错误消息的处理。 ActionForm有多种用法,例如: 1. **...
- `<init-param>`元素用于配置初始化参数,这里指定了两个配置文件:`/WEB-INF/struts-config.xml`和`/WEB-INF/struts-config-Wildcard.xml`,这些文件包含了Struts应用的配置信息。 - `<load-on-startup>`属性指定...
当Web服务器启动时,根据`web.xml`配置文件,ActionServlet(Struts的总控制器)被加载并初始化。ActionServlet会读取`struts-config.xml`配置文件,从中获取模块配置信息,如ActionConfig、ControlConfig、...
当Web应用启动时,Struts的核心控制器`ActionServlet`被加载并初始化。它会解析`struts-config.xml`配置文件,从中提取ActionMappings信息,并存储到内存中。`ActionServlet`是Controller层的主要组件,负责协调...