2011-11-04 80 views
1

即时修改现有的应用程序。我的问题甚至是表单提交的验证失败,它仍然执行execute方法。验证失败,但它仍然在struts2上运行执行

我的支柱文件

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
<!-- <include file="com/paritysys/util/struts.xml" /> --> 

<constant name="struts.url.includeParams" value="none" /> 
<constant name="struts.action.extension" value="html,action" /> 

<package name="public" extends="struts-default"> 
    <interceptors> 
     <interceptor name="websiteOnline" 
      class="parity.action.website.OnlineInterceptor" /> 
     <interceptor name="websiteLogin" 
      class="parity.action.website.LoginInterceptor" /> 

     <interceptor-stack name="appStack"> 
      <interceptor-ref name="validation"> 
       <param name="excludeMethods">input,back,cancel,browse</param> 
      </interceptor-ref> 
      <!-- <interceptor-ref name="paritySessionStack"/> --> 
      <interceptor-ref name="websiteOnline" /> 
      <interceptor-ref name="websiteLogin" /> 
     </interceptor-stack> 
    </interceptors> 

    <default-interceptor-ref name="appStack" /> 

    <global-results> 
     <result name="login" type="redirectAction"> 
      <param name="actionName">index</param> 
     </result> 
     <result name="exception" type="freemarker">/public/error.html.ftl</result> 
     <result name="error" type="freemarker">/public/error.html.ftl</result> 
     <result type="freemarker" name="maintenance">/public/maintenance.html 
     </result> 
     <result type="freemarker" name="pre-offline">/public/pre-offline.html 
     </result> 
     <result type="freemarker" name="post-offline">/public/post-offline.html 
     </result> 
    </global-results> 

    <action name="index" class="parity.action.website.LoginAction"> 
     <result type="freemarker" name="success">/public/index.html.ftl</result> 
    </action> 

    <action name="login" class="parity.action.website.SubmitLoginAction"> 
     <result type="freemarker" name="success">/public/questionnaire.html.ftl 
     </result> 
     <result type="freemarker" name="input">/public/index.html.ftl</result> 
    </action> 

    <action name="submit" class="parity.action.website.SubmitQuestionnaireAction"> 
     <result type="freemarker" name="success">/public/thanks.html.ftl 
     </result> 
     <result type="freemarker" name="input">/public/questionnaire.html.ftl 
     </result> 
    </action> 

    <action name="whereIsMyId" class="parity.action.website.LoginAction"> 
     <result type="freemarker" name="success">/public/whereIsMyId.html.ftl 
     </result> 
    </action> 

    <action name="loadCollegeFinder" class="parity.action.website.LoadCollegeFinderAction"> 
     <result type="freemarker" name="success">/public/college_finder.html.ftl 
     </result> 
    </action> 

    <action name="findCollege" class="parity.action.website.FindCollegeAction"> 
     <result type="freemarker" name="success">/public/college_finder.html.ftl 
     </result> 
     <result type="freemarker" name="input">/public/college_finder.html.ftl 
     </result> 
    </action> 
</package> 

我的动作类代码

public void validate() { 
     logger.debug("validate fired"); 
Bla bla bla 
addFieldError("username","error"); 

     if (hasFieldErrors()) { 
      logger.debug("Field errors is true"); 
     } 
    } 

    public String execute() throws Exception { 
     logger.debug("execute firing"); 

     return result; 
    } 

任何想法,为什么会发生这种情况?由于某种原因,即使login.action失败了,它仍然会降低成功的回报率并向前发展。

回答

1

您的拦截器堆栈不包含“工作流程”拦截器堆栈,它决定了验证失败时该怎么做。

对于这个问题,它不包括“params”拦截器,它是如何在动作上设置参数的,所以它永远不会工作。您不能随意删除拦截器 - 这是S2获得其大部分功能的地方。此外,您可以设置默认结果类型 - 如果大多数情况下都是FreeMarker结果,而不是一遍又一遍地输入,则可能需要这样做。

相关问题