【问题标题】:validation failing yet its still running execute on struts2验证失败但它仍在 struts2 上运行
【发布时间】:2011-11-04 18:14:12
【问题描述】:

我正在对现有应用进行修改。我的问题是即使表单提交的验证失败,它仍在执行执行方法。

我的 struts 文件

<?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 失败,它仍然会发送成功返回并继续前进。

【问题讨论】:

    标签: struts2


    【解决方案1】:

    您的拦截器堆栈不包括“工作流”拦截器堆栈,它决定了在验证失败时要做什么。

    就此而言,它不包括“参数”拦截器,这是在操作上设置参数的方式,因此无论如何它都不会起作用。您不能随意删除拦截器——这是 S2 获得大部分功能的地方。 See the interceptor docs.

    此外,您可以设置默认结果类型 - 如果大多数内容都是 FreeMarker 结果,您可能想要这样做,而不是一遍又一遍地键入它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2020-04-19
      • 2014-03-29
      • 1970-01-01
      相关资源
      最近更新 更多