使用struts2框架遇到NoSuchMethodException

本文详细介绍了如何在Struts2框架中处理参数化的Action方法,特别是针对遇到的java.lang.NoSuchMethodException错误进行排查及解决过程。通过修改方法内部逻辑,从request中获取参数值,避免了直接传递参数导致的问题。文章还提供了关键代码片段和解决方案,对于理解Struts2框架中的Action处理机制和参数传递具有实际指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public String dowItemCg(String docType){
String type = "";
if(docType.equals("5")){
//若文件类型是5,则是下载绩效评价模板
type = "项目绩效评估报告格式.doc";
}else if(docType.equals("8")){
//若文件类型是8,则是下载项目评审报告模板
type = "项目评审报告.doc";
}else{
type = "templet.rar";
}
String fileName = "\\upload\\templet\\"+type;
try {
inputStream = ServletActionContext.getServletContext().getResourceAsStream(fileName);
} catch (Exception e) {
logger.error("下载附件时,读取文件失败!",e);
super.addActionError("读取文件失败,可能不存在该文件!");
return "error";
}
if(inputStream == null){
super.addActionError("读取文件失败,可能不存在该文件!");
return "error";
}
downloadChineseFileName = type;
try {
downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1");
}catch(Exception e){
logger.error("转换文件名编码时出错!",e);
}
return "download";
}


调用此方法时,报java.lang.NoSuchMethodException,才发现struts2框架不知带参数的action。果断改成在方法内通过request获取参数值。
15:30:30.601 [http-nio-8080-exec-5] ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: ognl.OgnlAction.execute() java.lang.NoSuchMethodException: ognl.OgnlAction.execute() at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1247) ~[ognl-3.0.19.jar:?] at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) ~[ognl-3.0.19.jar:?] at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) ~[xwork-core-2.3.32.jar:2.3.32] at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1370) ~[ognl-3.0.19.jar:?] at ognl.ASTMethod.getValueBody(ASTMethod.java:91) ~[ognl-3.0.19.jar:?] at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[ognl-3.0.19.jar:?] at ognl.SimpleNode.getValue(SimpleNode.java:258) ~[ognl-3.0.19.jar:?] at ognl.Ognl.getValue(Ognl.java:467) ~[ognl-3.0.19.jar:?] at ognl.Ognl.getValue(Ognl.java:431) ~[ognl-3.0.19.jar:?] at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:352) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:404) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:350) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:290) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:251) ~[xwork-core-2.3.32.jar:2.3.32] at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) ~[struts2-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.Defaul
最新发布
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值