2016-01-21 74 views
1

我正在开发一个应用程序使用struts 2和休眠。我有一个提交按钮我的jsp页面上是有作用EvaluateRatingStruts正在使用不正确的返回字符串。而不是“输入”它应该采取“成功”

JSP页面

<s:form action="EvaluateRating"> 
// Some jsp code here // 
    <s:hidden name="Year" value="2015" /> 
    <s:submit value="Evaluate" cssStyle="float:right"/> 
</s:form> 

,因此这个动作在struts.xml

struts.xml的

映射
<action name="EvaluateRating" class="Action.RatingAction" method="EvaluateRating"> 
    <result name="success" type="redirectAction"> 
     <param name="Year">${Year}</param> 
     <param name="actionName">MgrPage</param> 
    </result> 
    <result name="input">/Index.jsp</result> 
</action> 

EvaluateRating()方法是这样的:我现在面临被我所传回的方法success

RatingAction.java

public String EvaluateRating() { 
    this.setYear(this.getYear()); 
    return "success"; 
} 

问题,但它仍然是采取input为返回字符串并重定向到Index.jsp页面。相反,它应该采取success并重定向到动作MgrPage

,如果我没有在我的struts.xml中<result name="input">/Index.jsp</result>线。这是给我以下错误:

Struts Problem Report

Struts has detected an unhandled exception:

Messages: No result defined for action Action.RatingAction and result input

Stacktraces 
No result defined for action Action.RatingAction and result input 
    com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275) 
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) 
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563) 
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

回答

0

它似乎有些拦截器,动作和返回输入结果之前应用。

检查并删除此动作的拦截器。

+1

我没有在这个动作中编写任何拦截器代码,你可以在上面看到我的**'struts.xml ** **代码 – Rish

+0

+1为了理解它是一个拦截器, INPUT结果-1用于提示删除拦截器而不是修复问题 –

+0

@Andrea我建议删除不必要的自定义拦截器,从而产生问题 –

0

I have not written any interceptor code in that action. You can see my struts.xml code above.

如果不指定一个动作的任何拦截,你正在使用你的包中定义的默认拦截器栈。

如果你不改变你的包默认拦截器栈,您使用的是默认的,那个叫defaultStack

<interceptor-stack name="defaultStack"> 
    <interceptor-ref name="exception"/> 
    <interceptor-ref name="alias"/> 
    <interceptor-ref name="servletConfig"/> 
    <interceptor-ref name="i18n"/> 
    <interceptor-ref name="prepare"/> 
    <interceptor-ref name="chain"/> 
    <interceptor-ref name="scopedModelDriven"/> 
    <interceptor-ref name="modelDriven"/> 
    <interceptor-ref name="fileUpload"/> 
    <interceptor-ref name="checkbox"/> 
    <interceptor-ref name="datetime"/> 
    <interceptor-ref name="multiselect"/> 
    <interceptor-ref name="staticParams"/> 
    <interceptor-ref name="actionMappingParams"/> 
    <interceptor-ref name="params"/> 
    <interceptor-ref name="conversionError"/> 
    <interceptor-ref name="validation"> 
     <param name="excludeMethods">input,back,cancel,browse</param> 
    </interceptor-ref> 
    <interceptor-ref name="workflow"> 
     <param name="excludeMethods">input,back,cancel,browse</param> 
    </interceptor-ref> 
    <interceptor-ref name="debugging"/> 
    <interceptor-ref name="deprecation"/> 
</interceptor-stack> 

的拦截器栈是拦截器的列表,过滤器从请求该页面的动作,动作执行页面

enter image description here

你必须定义(在当地的行动,或在全球范围内包装)的输入结果后,为了避免越来越

Messages: No result defined for action Action.RatingAction and result input

为什么和什么时候从拦截器返回INPUT结果?有不同的原因:验证错误,转换错误等。

确保仔细阅读

Struts2 INPUT result: how does it work? How are conversion/validation errors handled?


要看到这是错误,你可以映射input结果你在同一个页面(如果使用XHTML默认主题),错误将出现在生成它的字段旁边(推测为Year,因为它是唯一的)。如果您希望将其打印在其他页面(如index.jsp)中,则可以循环访问您将获得的fieldErrors,方法是使Action Action扩展ActionSupport。


这就是说,你正在使用错误的命名(年份必须是年,从来没有在一个OGNL大写字母开头(Struts标签)和配置(struts.xml中),因此通过更正启动,也删除完全没用的this.setYear(this.getYear());

+0

你试过了吗?请不要忘记接受并赞扬答案,谢谢 –