Could not find action or result的错误原因

最近在使用的struts2做个小案例时 出现了这个错误啊,控制台提示Could not find action or result,下面是报出的具体细节,我搜索了很多的相关的资料,终于找到了我的错误原因。
下面是控制台输出的异常

2017-07-18 11:07:17,478 [org.apache.struts2.dispatcher.Dispatcher]-[WARN] Could not find action or result
No result defined for action action.OrderAction and result input
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:375)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol AbstractConnectionHandler.process(AbstractProtocol.java:589)atorg.apache.tomcat.util.net.AprEndpoint SocketProcessor.run(AprEndpoint.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

我的JSP代码片段如下:

<form action="order" method="post" enctype = "multipart/form-data>
    <input type="hidden" name="op" value="doAdd" />
    <table class="input_table" border="0" cellPadding="3" cellSpacing="0">
        <tr>
            <td class="input_title">订单编号</td>
            <td class="input_content">${item.odrId }</td>
            <td class="input_title">下单日期</td>
            <td class="input_content">${item.odrOrderDate }</td>
        </tr>
        <tr>
            <td class="input_title">客户名称</td>
            <td class="input_content">${item.odrCustomerName }</td>
            <td class="input_title">送货时间</td>
            <td class="input_content">${item.odrDeliverDate }</td>
        </tr>
        <tr>
            <td class="input_title">送货地址</td>
            <td class="input_content" colspan="3">${item.odrDeliverAddr }</td>
        </tr>
    </table>
    <table class="data_table" border="0" cellPadding="3" cellSpacing="0">
        <tr>
            <td class="data_title" style="width:200px;">产品名称</td>
            <td class="data_title" style="width:100px;">单价</td>
            <td class="data_title" style="width:100px;">数量</td>
            <td class="data_title" style="width:100px;">总价</td>
            <td class="data_title">操作</td>
        </tr>
        <s:iterator   value="item.saleOrderLines" id="pl">
            <tr>
                <td class="data_cell">${odlProductName }</td>
                <td class="data_cell" style="text-align:right;">${odlProductPrice }</td>
                <td class="data_cell" style="text-align:right;">${odlProductCount }</td>
                <td class="data_cell" style="text-align:right;">${odlProductPrice * odlProductCount }</td>
                <td class="data_cell"><button disabled="disabled">删除</button></td>
            </tr>
        </s:iterator>
        <tr>
            <td class="data_cell">
                <input type="hidden" name="line.saleOrder.odrId" value="${item.odrId }" />
                <s:select name="line.odlProductName" onchange="javascript:setProdPrice(this);" list="prodList" listKey="prodName" listValue="prodName" headerKey="1" headerValue="请选择..." theme="simple">
                </s:select>
            </td>
            <td class="data_cell"><input type="text" name="line.odlProductPrice" readonly="true" size="15" /></td>
            <td class="data_cell"><input type="text" name="line.odlProductCount" value="0" onblur="setTotal();" size="15" /></td>
            <td class="data_cell"><input type="text" name="total" readonly="readonly" value="0" size="15" /></td>
            <td class="data_cell"><button onclick="javascript:doAddDetail();">保存订单行</button></td>
        </tr>
    </table>

</form>

我的action的代码如下:

public String toAddDetail()
                throws ServletException{
            ActionContext ac=ActionContext.getContext();
//          ActionForward af = null;
            //根据id加载SaleOrder
            //String id = (String) ac.get("id");
            Long orderId = Long.parseLong("30");
            SaleOrder item = this.orderService.getWithLines(orderId);
            //保存到Form中
//          OrderForm myForm = (OrderForm)form;
//          myForm.setItem(item);
            //产品下拉列表
            List prodList = this.productService.getAll();
            ac.put("prodList", prodList);
            //转发到视图
            String ref=INPUT;
//          af = mapping.findForward("detail_add");
            return ref;//返回input
        }

struts.xml的配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="order" extends="struts-default">
        <action name="order" class="action.OrderAction"
            method="toAdd">
            <result name="success">/WEB-INF/jsp/order/add.jsp</result>
            <result name="input">/WEB-INF/jsp/order/detail_add.jsp</result>
            <result name="addDetail" type="redirect">/order!toAddDetail.action</result>
        </action>
    </package>
</struts>  
出现这个错误之后我分别对jsp页面,action代码和struts.xml进行了检验。

首先我查看了jsp中的form表单中的代码,确认form表单的action和struts.xml中的action相对应。
第二 检查struts.xml中的result和action类中的返回值是否一样,进行统一的编写。
第三 进行测试,在控制台输出信息,查看出错的地方。
最后发现问题了,form表单的action 可以找到对应的Java类,只是在返回结果的时候出现问题,struts2中没有找到对应的结果页面。

    解决的方法: 最后直接删除了Myeclipse Stryts2框架自动导入的Myeclipse Liberaries里的 struts-convention-plugin.jar文件,这个jar保具体的功能可能是更改了默认的返回路径。
    ![直接删除struts-convention-plugin.jar](https://img-blog.csdn.net/20170718111820642?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM4MTYwNDQz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: t错误是指在Struts2框架中找不到指定的ActionResult。这可能是由于配置文件中的拼写错误ActionResult名称错误、配置文件缺失或路径错误原因引起的。要解决此错误,需要检查配置文件中的拼写和路径是否正确,并确保ActionResult名称正确。 ### 回答2: “Could not find action or result”是一个错误提示,通常出现在计算机程序中。它表示在执行某个操作或者查找某个结果时,程序无法找到相应的动作或结果。 这个错误可能是由以下原因引起的: 1. 输入错误:用户输入的指令或参数不正确,导致程序无法识别。例如,用户可能打错了命令或者提供了错误的参数。 2. 缺少相关文件或资源:某些操作需要依赖特定的文件或资源,如果缺少这些文件或资源,程序无法执行相应的动作或查找结果。 3. 脚本错误:如果使用脚本语言编写的程序,错误可能出现在脚本的代码中。可能是代码逻辑有误,或者引用了不存在的动作或结果。 解决这个问题的方法有: 1. 仔细检查输入:检查所输入的指令或参数是否正确,确保没有拼写错误或遗漏信息。 2. 确认文件和资源存在:检查所需的文件和资源是否存在,并确认它们被正确地引用和加载。 3. 检查脚本代码:如果使用脚本编写的程序,检查脚本代码是否正确。可以尝试使用调试工具来定位问题所在。 4. 查找程序文档:根据程序的文档或帮助文件,查找有关该错误的更多信息和解决方法。 总之,“Could not find action or result错误提示是一个比较常见的问题,在解决它时需要仔细检查输入、确认文件和资源的存在以及检查脚本代码等。 ### 回答3: “Could not find action or result”是一个英语短语,翻译成中文的意思是“找不到动作或结果”。在计算机编程或软件开发中,这个短语通常表示在某个程序或操作中没有找到所需的动作或结果。 例如,在软件的错误提示信息中,当用户尝试执行某个特定操作而系统无法找到对应的动作或结果时,就会出现“Could not find action or result”这个错误提示。这可能是由于代码缺失、配置错误或者用户的输入错误原因导致的。 为了解决这个问题,我们可以尝试以下几个步骤: 1. 检查输入:首先,我们需要确认用户提供的输入是否正确。确保输入的格式和要求符合预期。如果有必填项或格式要求,请检查输入是否满足这些要求。 2. 检查代码:如果错误信息指向了某段代码,我们需要仔细检查这段代码是否存在错误或缺失。查看错误信息提供的相关信息,例如行号、文件名等,尝试定位到可能存在问题的代码段。 3. 检查配置:有时候,错误可能是由于配置错误引起的。我们需要检查程序或系统的相关配置是否正确设置。特别是涉及到路径、权限、访问控制等方面的配置项,确保其能正确匹配所需的动作或结果。 4. 查找文档或寻求帮助:如果以上步骤仍然无法解决问题,我们可以查找相关的文档或使用搜索引擎寻求帮助。在开发者社区或论坛中提问,寻求专家或其他开发者的建议和帮助。 总之,当出现“Could not find action or result错误时,我们需要仔细检查输入、代码和配置,并寻求相关文档或他人的帮助来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值