struts2的java.lang.NoSuchMethodException错误
不久前在学习struts时出现这个错误,在网上搜索了半天,发现答案不一。将其总结如下,以方便大家参考。
1、
你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承structs里面的DispatchAction或者其它的类。还有你注意下方法的参数列表,类型顺序要正确才行,是按照以下顺序的:ActionMapping mapping,ActionForm form ,HttpServletRequest request,HttpServletResponse response
2、
发现有两种错误可能引起上述异常:
一.Action 类的方法被定义成 private 类型.
如下 Action 中被访问的方法被定义成 private 类型.程序在访问其方法时,会抛出以上异常.
3、
其实java.lang.NoSuchMethodException这个异常的根本原因有两个:第一,缺少某些jar文件;第二,某些jar文件有重复。
4、
使用struts2框架出现的问题
在页面使用jquery ajax 调用action中的vaildUname方法,报错,说我的方法不存在。但实际是存在的。
public String vaildUname(String loginName) throws Exception{}
问题就在这个参数上,struts2中是不能有参数的(具体我也不知道为什)
解决方法:
private String loginName;
public String vaildUname() throws Exception{}
loginName的getter和setter方法
这样在使用ajax调用的时候,就可以了
· struts2是通过反射机制来执行action的方法,struts2规范目前action方法是不需要参数的,有参数的方法和没参数的方法是两个不同的方法,所以会出现找不到的情况。
5、
jar版本不对
应该是3.6jar包的问题,换回3.2的包又没事了
6、
java.lang.NoSuchMethodException 这个异常是指你的action里面没有这个方法,说明已经找到了action 但是没有找到方法,所以有2个情况,
第1种情况是,你提交到的不是这个action ,查查配置文件,有没有一样的path
第2种情况,你的action里面没有这个方法
下面是转载的
public class NoSuchMethodExceptionextends Exception
无法找到某一特定方法时,抛出该异常。
------------------------------------------------------------------------------------------------------------------------
事实上我有特定的方法,为什么struts2报此异常呢?
以下是struts2配置文件片段:
<package name="basedate" extends="struts-default" namespace="/basedate">
<!-- 服务商管理 -->
<action name="saveOrUpdateBranch" class="branchAction" method="saveOrUpdateBranch">
<result name="success">/WEB-INF/pages/srvclink/basedate/branch/branch.jsp</result>
<result name="input">/WEB-INF/pages/srvclink/basedate/branch/branch.jsp</result>
</action>
<action name="editBranch" class="branchAction" method="editBranch">
<result name="success">/WEB-INF/pages/srvclink/basedate/branch/branch.jsp</result>
</action>
<action name="deleteBranch" class="branchAction" method="deleteBranch">
<result name="success" type="redirect">saveOrUpdateBranch.action?isNew=true</result>
</action>
<action name="searchBranch" class="branchAction" method="searchBranch">
<result name="success">/WEB-INF/pages/srvclink/basedate/branch/branch.jsp</result>
</action>
<!-- 运输商管理 -->
<action name="saveOrUpdateBranch" class="carrierAction" method="saveOrUpdateBranch">
<result name="success">/WEB-INF/pages/srvclink/basedate/carrier/carrier.jsp</result>
</action>
<action name="editCarrier" class="carrierAction" method="editCarrier">
<result name="success">/WEB-INF/pages/srvclink/basedate/carrier/carrier.jsp</result>
</action>
<action name="deleteCarrier" class="carrierAction" method="deleteCarrier">
<result name="success" type="redirect">saveOrUpdateCarrier.action?isNew=true</result>
</action>
<action name="searchCarrier" class="carrierAction" method="searchCarrier">
<result name="success">/WEB-INF/pages/srvclink/basedate/carrier/carrier.jsp</result>
</action>
</package>
细心的朋友应该能够发现,因为复制粘贴惹的祸。导致同一命名空间下存在两个同名的action定义,这不是关键,关键问题是,两个同名action的实例引用是不一样的,struts2是顺序解析配置的action,如果我们请求saveOrUpdateBranch,struts2会在命名空间为/basedate里查找请求的action是否存在,如果存在就调用这个action,如果不存在报异常告诉用户“在请求的命名空间中找不到指定的action”。这里我们请求的action是存在的,错就错在,它是顺序解析,即便你第一个action定义无误,但是它并未调用。它会继续查找/basedate下的action,当它发现还有一个命名为saveOrUpdateBranch的action时,也是最后一个aciton时,它才调用这个请求的action。但是我们这里最后执行的action的引用又确实不存在。
我们最后定义的这个同名的action的实例是class="carrierAction" 。事实上,实例carrierAction确实没有"saveOrUpdateBranch"方法,所以struts2就抛出无法找到特定的方法的异常。
粗心大意害死人哦 ...
struts2的java.lang.NoSuchMethodException错误的更多相关文章
- struts2的java.lang.NoSuchMethodException异常处理(转)
不久前在学习struts时出现这个错误,在网上搜索了半天,发现答案不一.将其总结如下,以方便大家参考. 1. 你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承 ...
- struts2的java.lang.NoSuchMethodException异常处理
1. 你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承structs里面的DispatchAction或者其它的类.还有你注意下方法的参数列表,类型顺序要正确 ...
- MyBatis3.4.0以上的分页插件错误:Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.stateme
错误: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named p ...
- MapReduce错误之Error: java.lang.RuntimeException: java.lang.NoSuchMethodException的解决方法
今天跑MapReduce项目的时候遇到了这个问题,日志如下所示: // :: DEBUG ipc.ProtobufRpcEngine: Call: getDiagnostics took 19ms E ...
- 错误处理:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
部署项目时,启动Tomcat一直出错:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter SEVE ...
- springboot访问出错,mapperScan导包错误java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>() at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_172] at java.
2019-08-06 12:42:03.153 ERROR 10080 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ...
- Stacktraces java.lang.NoSuchMethodException: com.liuyang.action.UserAction.add()
Struts Problem Report Struts has detected an unhandled exception: Messages: com.liuyang.action.UserA ...
- java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet的解决方案
tomcat7启动后出现:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet这个问题. 并且访问 ...
- java.lang.NoSuchMethodException
这个异常遇到过若干次,提示信息也比较清楚的指示出它的特点,当无法找到某一特定方法时,就会抛出该异常! 我所遇到的抛出此异常的情景主要有以下两种: 1:对应的JAVA类中没有对应的属性,也就是说在页面的 ...
随机推荐
- Python3 与 C# 并发编程之~ 进程篇
上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出- 如果遇到听不懂的可以看上一次的文章:https://www.cnblogs.com/dot ...
- idea搭建springboot
1.创建新项目 2.继续项目配置 Name:项目名称Type:我们是Maven构建的,那么选择第一个Maven ProjectPackaging:打包类型,打包成Jar文件Java Version: ...
- tolua之wrap文件的原理与使用
什么是wrap文件 每个wrap文件都是对一个c#类的包装,在lua中,通过对wrap类中的函数调用,间接的对c#实例进行操作. wrap类文件生成和使用的总体流程 生成一个wrap文件的流程 这部分 ...
- CSS font字体知识学习
字体系列 [1]5种通用字体系列:拥有相似外观的字体系列 serif字体:字体成比例,且有上下短线(衬线字体),包括Times\Georgia\New century Schoolbook sans- ...
- SHELL希尔排序
/****************************************************************************** * Compilation: javac ...
- 常见的游戏AI技术对比(FSM,HFSM,BT,GOAP,HTN,Utilitay,机器学习)
最近研究的内容,比较懒还没写文章,先占个坑,过几天补
- 转载-CentOS7关闭防火墙
原文地址-http://www.cnblogs.com/silent2012/archive/2015/07/28/4682770.html CentOS 7.0默认使用的是firewall作为防火墙 ...
- 第六节,Python的科学计算包——Numpy
1.基本类型(array) import numpy as np a=[1,2,3,4] b=np.array(a) #array([1,2,3.4]) type(b) #<type 'nump ...
- mysl 常用函数 union all if ifnull exists case when
1.union all UNION 操作符用于合并两个或多个 SELECT 语句的结果集.请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 S ...
- 解析电子墨水屏技术(工作原理与LCD的区别)【转】
转自:https://blog.csdn.net/weixin_42509369/article/details/84646808 阅读电子书早已成为大家生活中一部分,方便轻巧的电子版书籍更便于携带, ...