`
ethen
  • 浏览: 122258 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts Form Action小常识

阅读更多

在创建Action的时候,从form角度去看有两种可能,一种是带formAction,另一种是不带formAction,所以在使用这两种Action的时候有几种情况要注意:

1.比如做一个搜索的功能,因为form里需要提交的数据只有一个字段,此种情况下也许为了简单,你并不想为这一个字段建一个form,所以你没有建form,而是想在action里通过request.getParameter("keyword")这种方式得到表单里的值,因此你建了一个不带formaction用来做Controller。在jsp页面里也许你会这样写:

<html:form action="/search">

<input type="text" name="keyword"/>

<input type="submit" value="搜索"/>

</html:form>

运行一下,发现在访问这个jsp页面的时候报错,为什么呢?我的确有path="/search"action啊,好下面我们来分析一下,当你使用struts<html:form>标签的时候,其实struts为你做了以下一些事情:

1.先看一下,web.xml里配置struts中有以下代码段:

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

  这个struts-config.xml文件在Tomcat容器启动完毕后就已经加载了,此时struts框架就可以读取里面的内容了。

 

2.当你访问jsp页面,并且页面加载到<html:form>标签的时候,就会触发struts框架的部分程序运行:

(1)struts会根据form里的action路径在struts-config.xml文件里进行匹配,如果匹配不到,直接报错。

(2)如果匹配到了,继续寻找此action所对应的form

(3)找到后将form的名字填充到普通HTML标签里的formname属性里。

(4)与此同时,struts会按照此form的名字在指定的范围内找有没有对应的formbean存在。

(5)如果没有找到formbeanstruts就会按照这个form名字利用java的反射机制创建出一个formbean实例来。

 

3.看完上面的第2点后,我们来想一想如果在struts-config.xml里找到了action而没有找到对应的form,会发生什么情况?在执行上面的(4)的时候会有异常出现,原因如下:

form的名字=null

request.getAttribute(null); 

此时就引发了一个空指针异常,显而易见这是struts所不能容忍的,于是乎,struts在此之前就要判断form的名字是不是null,是的话new一个自己的异常出来,大家也看的清楚些。

javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot retrieve definition for form bean null on action search.do

----------------------------------------------------------------------------------

 

如果把jsp里的代码改动如下:

<form action="search.do">    ---这里换成了普通的form标签

<input type="text" name="keyword"/>

<input type="submit" value="搜索"/>

</form>

此时能够正常运行,因为此种写法不会触发struts框架执行上面的那么多的流程,自然也就能够正常运行了。

分享到:
评论

相关推荐

    struts form action验证

    本篇将深入探讨Struts中的Form验证和Action验证,以及如何通过一个简单的计算器应用来实践这些验证方法。 一、Struts Form验证 Form验证在Struts中主要负责前端用户输入的数据检查。当用户在Web表单中填写信息并...

    struts form 表单 用法

    在Web开发中,表单是用来收集用户输入数据的界面元素,而Struts Form则提供了与JavaBean对象结合的方式,使得这些数据能够被模型层处理。下面将详细介绍Struts Form表单的用法及其与HTML `&lt;form&gt;`标签的混合使用。 ...

    Struts常见的Form(一)

    在Struts中,Form Bean是用于处理用户输入的重要组件,它充当了模型层与视图层之间的桥梁。本篇文章将深入探讨Struts中的常见Form类型及其应用。 首先,我们要理解Form Bean的作用。Form Bean是用来存储用户从页面...

    Struts in Action 中英文对照

    这本书详细讲解了如何使用Struts框架来构建领先的Java Web应用程序,涵盖了从基础到高级的主题,包括Action类、Form Beans、Tiles、国际化、异常处理、以及与其他框架如Hibernate和Spring的集成。 2. "Struts in ...

    一个struts的action跳转大全

    ### Struts Action 跳转大全解析 #### Struts框架的工作流程 在开始具体解析之前,我们先简要回顾一下Struts框架的工作流程。当用户发起一个HTTP请求时,Struts框架中的`ActionServlet`接收该请求,并通过读取`...

    Struts In Action(英文)

    1. **Struts基础知识**:首先,会介绍Struts的基本架构,包括Action、Form Beans、Actionservlet、配置文件(struts-config.xml)等核心组件的作用和用法。通过这些基础知识的学习,读者可以理解Struts如何协调前端...

    struts2 result转向到action

    ### Struts2 Result 转向到 Action 的深入解析 #### 一、基本概念与应用场景 **Struts2** 是一款流行的 Java Web 开发框架,它支持多种开发模式(如 MVC),并提供了一系列用于简化 Web 应用程序开发的功能。在 ...

    Struts in Action

    首先,书中的"源码"部分可能会探讨Struts框架的内部工作原理,包括Action、Form Bean、Controller Servlet、Tiles和国际化等关键组件的源代码分析。通过阅读源码,读者可以理解Struts如何处理HTTP请求,以及如何将...

    struts in action完整中文版

    2. **配置文件**:Struts框架依赖于`struts-config.xml`配置文件,其中定义了Action的映射、Form Bean、数据源以及其他配置信息,是实现MVC模式的重要桥梁。 3. **Form Bean**:用于封装用户输入的数据,通常与JSP...

    struts2 使用action属性接收中文参数(post提交)

    在处理用户请求时,Struts2允许开发者通过Action类来接收和处理参数,包括中文参数。当我们需要通过POST方法提交包含中文字符的数据时,可能会遇到编码问题,因为HTTP请求默认使用的是ASCII编码,而中文字符需要UTF-...

    Struts-Action核心代码

    开发者需要掌握ActionServlet的工作原理,以及如何编写Action类、配置`struts-config.xml`、设计Form Bean,以及如何利用Struts的标签库来创建动态的用户界面。通过深入学习和实践,可以更好地利用Struts实现高效的...

    struts2.0之action

    Struts2.0是Java Web开发中的一个框架,它的核心组件是Action,它负责处理用户的请求并进行业务逻辑处理。相较于Struts 1.x,Struts 2.0的Action模型有着显著的区别。 在Struts 1.x中,Action类需要继承`org.apache...

    Struts_In_Action(中文完整版)

    2. **配置详解**:书中详细阐述了Struts的配置文件(struts-config.xml),包括ActionMapping、FormBeans、ActionForward、PlugIn等核心元素的配置方法,以及如何使用XML来组织应用程序的结构。 3. **动作(Actions...

    Struts中action技术实现对数据的增删改查

    Struts是Java Web开发中的一个开源框架,主要负责控制应用程序的流程,而Action技术是Struts的核心组件之一,用于处理用户的请求。在这个场景中,我们讨论的是如何利用Struts的Action来实现对数据库数据的增删改查...

    Struts高级部分(2)(常用Action、验证框架、动态Form)

    本篇将深入探讨Struts框架的高级部分,包括常用Action、验证框架以及动态Form,这些都是开发过程中不可或缺的重要概念。 一、常用Action Action是Struts的核心组件,它负责处理用户请求,并进行业务逻辑处理。在...

    Struts In Action

    首先,"commons-scaffold.zip"包含了Struts框架中的公共模版或基础结构,它可能包含了一些常用的Action类、Form Bean、以及与业务逻辑交互的DAO(数据访问对象)和VO(值对象)。 Commons Scaffold是Struts中用于...

    JS调用Struts中的Action

    ### JS调用Struts中的Action #### 背景与概念 在Web开发中,JavaScript(简称JS)作为客户端脚本语言,常被用来增强用户体验、处理表单验证等前端任务。而Struts框架则是Java Web开发中常用的一个MVC(Model-View-...

    Struts In Action中文版

    在《Struts In Action》一书中,作者详细介绍了Struts的核心概念和工作原理,包括Action、Form Bean、配置文件、国际化、异常处理、Tiles组件、Struts与Spring的集成、Struts与Hibernate的整合等。书中的实例丰富,...

    Struts1.2Action之处理多个业务

    Action类通常继承自org.apache.struts.action.Action,你可以根据业务需求重写execute方法。 **二、多业务处理** 在实际开发中,一个Action往往需要处理多个相关的业务操作。例如,一个用户管理的Action可能需要...

Global site tag (gtag.js) - Google Analytics