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框架执行上面的那么多的流程,自然也就能够正常运行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值