几种在struts-config.xml中经常由于粗心导致的配置错误
1 在action-mapping中的path属性中没有匹配到请求url的对应action时,一般会抛出如下异常Java代码- org.apache.struts.chain.commands.InvalidPathException:
- No action config found for the specified url
可能是由于没有设置该<action>或者没有正确设置<action>中的path属性。
2 在<action>中如果没有配置name属性或者name属性配置错误导致在<form-beans>中找不到匹配的元素时,struts容器并不会抛异常,而是很简单的将一个null值作为form参数传递给了Action.execute()方法。 Xml代码- <action path="/login" type="com.element.LoginAction" name="loginForm">
- <forward name="loginSuccess" path="/loginSuccess.jsp"></forward>
- <forward name="loginFailure" path="/loginFailure.jsp"></forward>
- </action>
即:
Java代码- public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
方法中的form被struts传入null值,在接下来的form转型并不会抛异常,因为(LoginForm)null是合法的。但是在后面的对loginform存取参数的代码中一定会抛出NullPointException异常。
如果在一次request请求中不需要提交附加数据,那么就不需要在<action>中配置name属性。
3 表单上的控件name属性和formbean中的属性名不匹配的时候,struts就不会设置form中的那个不匹配的属性了,这样在转型后存取参数的时候就会发生NullPointException异常。Html代码- <form action="<%=request.getContextPath()%>/login.do">
- username:<input name="username1" type="text"/><br/>
- password:<input name="password" type="password"/><br/>
- <input name="test" type="text"/>
- <input type="submit" value="登陆">
- </form>
但是如果name属性匹配到formbean中的属性,但是表单控件并没有输入,则浏览器会发出
Html代码- login.do?username=&password=xxx
之类的url请求,这时struts会讲formbean中的属性设置为“”空字符串,而对于其他类型的属性,例如int型,就会设置成0值。
此文章转自:http://hi.baidu.com/yingshuishui1/item/c6a1610ad1b4851bebfe3870