проблема с порядком перехватчиков Struts2 - PullRequest
0 голосов
/ 11 октября 2011

У меня определен следующий стек перехватчиков

    <interceptor-stack name="applicationStack">
            <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="debugging"/>
            <interceptor-ref name="scopedModelDriven"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="multiselect"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params">
              <param name="excludeParams">dojo\..*,^struts\..*</param>
            </interceptor-ref>
            <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="contextSecurityInterceptor" />
    </interceptor-stack>

с этим значением из пользовательского интерфейса не передается в действие, из-за которого «требуемая» проверка всегда завершается неудачей. если я сначала изменяю порядок перехватчика на «рабочий процесс», то на «валидацию», так как значения отправляются, и действие выполняется без проверки значений. какой должен быть порядок перехватчиков для поддержания порядка и представления данных в порядке.

struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <constant name="struts.objectFactory" value="spring" />
        <constant name="struts.devMode" value="false" />

        <constant name="struts.action.extension" value="action" />

        <constant name="struts.custom.i18n.resources" value="global" />

        <package name="org" namespace="/"
            extends="struts-default,json-default">

            <result-types>
                <result-type name="tiles"
                    class="org.apache.struts2.views.tiles.TilesResult" />
            </result-types>

            <global-results>
                <result name="welcome" type="tiles">welcome</result>
            </global-results>

        </package>

        <package name="org.unsecureActions" extends="org">
            <!--
                This package contains such a actions which doesn't need user logged
                in.
            -->

            <action name="welcome" method="forwardAction" class="baseAction">
                <result name="success" type="tiles">welcome</result>
            </action>

            <action name="logoutCandidate" method="logoutCandidate" class="logoutAction">
                <result name="success" type="tiles">welcome</result>
            </action>

            <action name="loadAdvanceSearchForm" method="loadAdvanceSearch"
                class="advanceSearchAction">
                <result name="success" type="tiles">advanceSearch</result>
            </action>

            <!--Candidate workflow  actions -->
            <action name="registerCandidateStep1" class="candidateAction"
                method="registerCandidateStep1">
                <result name="input" type="tiles">registerCandidate</result>
                <result name="success" type="tiles">registerCandidate</result>

            </action>

            <action name="registerCandidateStep2" class="candidateAction"
                method="registerCandidateStep2">
                <result name="input" type="tiles">registerCandidate</result>
                <result name="success" type="tiles">registerCandidate</result>

            </action>
            <action name="registerCandidateStep3" class="candidateAction"
                method="registerCandidateStep3">
                <result name="input" type="tiles">registerCandidate</result>
                <result name="success" type="chain">
                    <param name="actionName">loginCandidate</param>
                    <param name="namespace">/org.unsecureActions</param>
                </result>
            </action>

            <action name="loadCandidateRegistrationForm" class="loadCandidateFromAction"
                method="loadCandidateRegistrationForm">
                <result name="success" type="tiles">registerCandidate</result>
            </action>
            <!--Candidate workflow  actions -->

            <action name="loginCandidate" class="loginAction" method="loginCandidate">
                <result name="success" type="tiles">home</result>
                <result name="input" type="tiles">welcome</result>
            </action>

        </package>

        <package name="org.secureActions" extends="org">
            <!--
                This package contains such a actions which needs user must logged in
                before executing these.
            -->


            <action name="home" method="forwardAction" class="baseAction">
                <result name="success" type="tiles">home</result>
            </action>

            <action name="loadAdvanceSearchForm" method="loadAdvanceSearch"
                class="advanceSearchAction">
                <result name="success" type="tiles">advanceSearch</result>
            </action>

            <action name="simpleSearch" method="simpleSearch" class="simpleSearchAction">
                <result name="success" type="tiles">search</result>
                <result name="input" type="tiles">home</result>
            </action>

            <action name="advanceSearch" method="advanceSearch" class="advanceSearchAction">
                <result name="success" type="tiles">search</result>
            </action>
            <action name="loadImage" method="loadImage" class="imageAction">
                <result name="imageData" type="stream">
                    <param name="contentType">${imageContentType}</param>
                    <param name="inputName">imageStream</param>
                    <param name="contentDisposition">filename="candidate.jpeg"</param>
                    <param name="bufferSize">${myBufferSize}</param>
                </result>
            </action>

        </package>

    </struts>

1 Ответ

3 голосов
/ 11 октября 2011

Ни перехватчики «validation», ни «workflow» не отвечают за установку параметров для действия, которое выполняется перехватчиком «params».

«Рабочий процесс» имеет смысл только после «проверка», поскольку он проверяет, есть ли какие-либо ошибки в действии, и, если они есть, переходит во входной результат (по умолчанию).

Конфигурация, которую вы показываете, является конфигурацией по умолчанию плюс ваш перехватчик (что подозрительно ближе к концу для чего-то, называемого «безопасность»).

Если вы не видите значений, заданных в действии, значит что-то не так, потому что конфигурация по умолчанию работает как есть - так что это либо что-то с вашим перехватчиком, существующим потоком приложений и т. Д.

...