异常信息:
Java代码
2011-8-18 20:50:07 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NoSuchMethodException: Action[/userAction] does not contain specified method (check logs)
错误代码:
Java代码
public ActionForward doQuery(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response) throws Exception {
//内部实现略
}
问题出在方法的参数中
原本应重写DispatchAction类中的execute方法,改一下名字后直接使用。结果错误重写了Action类中的execute,
解决方案:
Java代码
public ActionForward doQuery(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
//内部实现略
}
出现此异常的其他几种情况:
1、自定义Action类需要继承DispatchAction类。
2、方法参数ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response 顺序也需一致。
3、方法的访问修饰符设置为public、不是protected,更不是其他。
4、动态调用Action,在struts-config.xml中要配置Action的parameter参数,
参数是页面传值的参数,值与要执行Action中的方法名相同。
5、页面表单提交方式为post,否则也有可能出现这种异常。
Xml代码
<action-mappings >
<action
path="/userAction"
type="org.springframework.web.struts.DelegatingActionProxy"
name="userForm"
parameter="method" >
<forward name="success" path="/index.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
Html代码
<html:form action="userAction.do?method=doQuery" method="post">
Name:<html:text property="user.fname"></html:text>
Area:<html:text property="user.farea"></html:text>
<html:submit value="Search Flowers"></html:submit>
</html:form>
2011-08-18 21:25
javax.servlet.ServletException: DispatchMapping[XXX] does not define a handler property
错误 :javax.servlet.ServletException: DispatchMapping[0] does not define a handler property
原因: action参数配置不全
解决方法:在 config文件中 添加 parameter="method"等
错误: 表单数据验证失败时发生错误,“No input attribute for mapping path”
原因:action中表单验证 validate="true" ,如果validate()返回非空的ActionErrors,将会被转到input属性指定的URI,而action中未指定input时会报此错
解决方法:添加 input="url" 或者 validate="false"
错误:jsp页面中,一个form有隐藏的method属性,<input type="hidden" name="method" value="<bean:message key="button.deleteall"/>"> ,当其他的button使用 method时会默认为使用该属性,则达不到程序员预期的操作
解决方法:实用javascript写一个function,改变该method值
function{
document.forms[0].elements.value="你要的操作名";
}
错误:Action里无法解析 导入的包,Form里的方法,但是代码没错
原因:不明,我是改变了validation.xml后重新发布而出了错的
解决方法:将工程关了,再打开,myeclipse会将工程重新构建,这样问题就解决了
ps:重启Tomcat是没有用滴……
错误:Struts:HTTP Status 404 - Servlet action is not available
原因
1、web.xml文件中未配置ActionServlet。
2、struts-config.xml文件未配置你要访问的Action。
3、你的jsp文件form标记中action属性的路径名称错误。
4、非以上三种情况。
针对以上4种情况相应的解决方案如下:
1、在web.xml文件中加上ActionServlet的配置信息
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
2、在struts-config.xml文件检查你要访问的Action配置文件。
3、检查jsp文件form标记中action属性的路径名称是否与struts-config.xml文件中action标记的path属性的路径名称一致。
4、非以上情况的解决办法就是检查web容器的log日志,如果时tomcat则检查下logs目录下的localhost_log文件,看里边是否记录有错误信息,然后根据错误信息提示将其纠正。
2011-05-09
联系客服