Java 为什么我在 Struts 2 应用程序中没有为操作定义结果

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21013395/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 05:56:23  来源:igfitidea点击:

Why am I getting No result defined for action in Struts 2 application

javajspvalidationstruts2

提问by Manoj Sharma

Currently i am new to struts 2 but i have the knowledge but when i am trying to perform validation in struts to i am getting problem in my struts 2 example which is a custom validation example. all code is below:

目前我是 struts 2 的新手,但我有知识,但是当我尝试在 struts 中执行验证时,我在我的 struts 2 示例中遇到了问题,这是一个自定义验证示例。所有代码如下:

index.jsp

索引.jsp

  <%-- 
    Document   : index
    Created on : Jan 9, 2014, 10:58:52 AM
    Author     : manoj.sharma
--%>

<%@ taglib uri="/struts-tags" prefix="s" %>  
<s:form action="register">  
    <s:textfield name="name" label="Name"></s:textfield>  
    <s:password name="password" label="Password"></s:password>  
    <s:submit value="register"></s:submit>  
</s:form>  

welcome.jsp

欢迎.jsp

    <%-- 
    Document   : welcome
    Created on : Jan 9, 2014, 11:08:37 AM
    Author     : manoj.sharma
--%>

<%@ taglib uri="/struts-tags" prefix="s" %>  
Name:<s:property value="name"/><br/>  
Password:<s:property value="password"/><br/>  

RegisterAction.java

注册操作.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.org.my.action;
import com.opensymphony.xwork2.ActionSupport;
/**
 *
 * @author manoj.sharma
 */
public class RegisterAction extends ActionSupport{  
private String name,password;

    //getters and setters 
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

public void validate() {  
    if(name.length()<1)  
        addFieldError("name","Name can't be blank");  
    if(password.length()<6)  
        addFieldError("password","Password must be greater than 5");  
}  

public String execute(){  
//perform business logic here  
    return "success";  
}  
}  

struts.xml

struts.xml

<struts>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
        <action name="register" class="com.org.my.action.RegisterAction">  
            <result name="input">/index.jsp</result>
            <result name="success">/welcome.jsp</result>
        </action>  
    </package>
</struts>

Please check the code and let me know where i am making mistake in this validation example.

请检查代码并让我知道我在此验证示例中哪里出错了。

Error on tomcat console:

tomcat 控制台错误:

No result defined for action com.org.my.action.RegisterAction and result input
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    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:246)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    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:472)
    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)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    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:744)

Jan 09, 2014 12:20:41 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger error
SEVERE: Exception occurred during processing request: No result defined for action com.org.my.action.RegisterAction and result input
No result defined for action com.org.my.action.RegisterAction and result input
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    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:246)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    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:472)
    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)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    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:744)

thanks for all who can help me...

感谢所有可以帮助我的人...

采纳答案by Reetika

I had the same problem i resolved this error:

我遇到了同样的问题,我解决了这个错误:

You need to do one change in your index.jsp file. Change the action in form. (try both form lines one by one)

您需要在 index.jsp 文件中进行一项更改。改变形式的行动。(一一尝试两个表格行)

<%@ taglib uri="/struts-tags" prefix="s" %>  
    <s:form action="RegisterAction.action">  or  <s:form action="register.action"> 
        <s:textfield name="name" label="Name"></s:textfield>  
        <s:password name="password" label="Password"></s:password>  
        <s:submit value="register"></s:submit>  
    </s:form>  

I hope it solve your problem.

我希望它能解决你的问题。

回答by Hunter Zhao

Try

尝试

public class RegisterAction extends ActionSupport{  
    private String name,password;

Separate into

分成

public class RegisterAction extends ActionSupport{  
    private String name;
    private String password;

回答by Rookie007

I think this may work . Change your struts.xmlcode

我认为这可能有效。更改您的struts.xml代码

<struts>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
    <action name="register" class="com.org.my.action.RegisterAction">  
        <result name="input">/index.jsp</result>
        <result name="success">/welcome.jsp</result>
    </action>  
</package>

to

<struts>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
    <action name="register" class="com.org.my.action.RegisterAction">  
        <result name="success">/welcome.jsp</result>
        <result name="input">/index.jsp</result>
    </action>  
</package>

Just change the sequence of results .. First define successand then input

只需更改结果的顺序.. 先定义success,然后input

回答by Nash

Change this -

改变这个——

<action name="register" class="com.org.my.action.RegisterAction">

to

 <action name="register" class="com.org.my.action.RegisterAction" method="execute">

in your Struts.xml file

在你的 Struts.xml 文件中

Thanks

谢谢

回答by Madhesh

check your web.xml. your web.xml has the below filters?

检查您的 web.xml。您的 web.xml 具有以下过滤器?

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <listener>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

回答by gyakhoe

Well, I guess you know how struts work and you have done everything correct but still fail to find out what's wrong with your project. You have your action class name mentioned correctly and methods name are correct. Result pages are set correctly but still it fails. I have one thing that you should check. For example, if you are taking name and age from web page and in action class you have set name as string and age as int as member variable of same class or in model driven fashion. In web page for testing purpose you have enter characters in both name and age. In such case struts will check for action class which takes string as name and age but fails to find it. Because the action class you created takes name as string and age as int. Hence 404 error is thrown.

好吧,我猜您知道 struts 是如何工作的,并且您已经正确完成了所有操作,但仍然无法找出您的项目出了什么问题。您正确提到了您的操作类名称并且方法名称正确。结果页面设置正确,但仍然失败。我有一件事你应该检查一下。例如,如果您从网页和操作类中获取名称和年龄,则将名称设置为字符串,将年龄设置为 int 作为同一类的成员变量或以模型驱动的方式。在用于测试目的的网页中,您输入了姓名和年龄的字符。在这种情况下,struts 将检查以字符串作为名称和年龄但未能找到它的动作类。因为您创建的操作类将 name 作为字符串,将 age 作为 int。因此抛出 404 错误。

or you can try this.

或者你可以试试这个。

I have found that changing the input helps in resolving this issue. I started my web application from the beginning by giving it proper refresh and it seem to resolve the issue.

我发现更改输入有助于解决此问题。我从一开始就通过适当的刷新来启动我的 Web 应用程序,它似乎解决了问题。

gyakhoe.com

gyakhoe.com

回答by Mansoor

change

改变

<struts>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
    <action name="register" class="com.org.my.action.RegisterAction">  
        <result name="input">/index.jsp</result>
        <result name="success">/welcome.jsp</result>
    </action>  
</package>
</struts>

to

<struts>
<!-- Configuration for the default package. -->
<package name="default" namespace="/" extends="struts-default">
    <action name="register" class="com.org.my.action.RegisterAction">  
        <result name="input">/index.jsp</result>
        <result name="success">/welcome.jsp</result>
    </action>  
</package>
</struts>