Правильно ли использовать один перехватчик в качестве перехватчика по умолчанию в стойках?

Это определение моего перехватчика struts.xml, но оно может быть неверным, поскольку IDE выдает сообщение об ошибке Не удается разрешить стек перехватчика login в default-interceptor-ref.

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

<package name="default" extends="struts-default">

    <interceptors>
        <interceptor name="login" class="com.pos.interceptor.LoginInterceptor"></interceptor>
    </interceptors>

    <default-interceptor-ref name="login"/>
    <global-results>
        <result name="error">/error.jsp</result>
        <result name="login" type="redirect">/login.jsp</result>
    </global-results>


    <action name="profile" class="com.pos.UserProfile" method="index">
        <result name="success">/index.jsp</result>
    </action>
</package>

Если я определяю стек перехватчика, IDE не будет ошибкой

        <interceptor-stack name="loginStack">
            <interceptor-ref name="login"/>
        </interceptor-stack>
    <default-interceptor-ref name="loginStack"/>

Оба вышеперечисленных работают после развертывания. Правильно ли использовать один перехватчик в качестве перехватчика по умолчанию?

Если правильно, то почему IDE выдает ошибку? Могу ли я решить ошибку?

Если это неверно, почему это будет работать после развертывания?


person CL So    schedule 16.08.2014    source источник


Ответы (1)


Все классы живут в контексте приложения, фабрика объектов Struts создает экземпляры классов и возвращает их при обращении к ним.

стек по умолчанию переопределяется вами, когда вы его указываете. Таким образом, стек по умолчанию недоступен для действий в этом пакете.

Часть 1: Когда вы указываете interceptor-ref name=login

Когда вы указываете некоторую строку в атрибуте имени, он анализирует эту строку, а затем получает объект из StrutsObjectFactory, затем он создает свой список в памяти. Затем InterceptorBuilder создает список ссылок. Этот класс возвращает список отображений.

Часть 2: Когда вы пишете default-interceptor-ref

Почему XML показывает ошибку?

<default-interceptor-ref > используется для определения стека перехватчиков по умолчанию, xml показывает ошибку, потому что вы указываете перехватчик вместо стека перехватчиков. Согласно DTD он недействителен. Согласно DTD ожидается тип стека-перехватчика.

Как удалить ошибку XML?

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

Почему он работает и с одним перехватчиком?

Это работает, потому что реализация также принимает одиночную ссылку на перехватчик. На самом деле эта конфигурация передает ссылку. Поэтому, если вы передаете стек, он будет иметь ссылку на коллекцию, если вы передаете один перехватчик, он будет передавать ссылку только на один перехватчик.

Теперь в struts2 есть исходный код, доступный в Интернете.

InterceptorStackConfig — это класс, который создает список и использует InterceptorlistHolder. InterceptorStackConfig реализует этот интерфейс в билдере и добавляет ссылки на сопоставления перехватчиков из сопоставлений перехватчиков одну за другой в список.

Это означает, что он работает только с mapping и получить ссылку.

Вы можете видеть, что он имеет InterceptorListHolder, который создает список перехватчиков для ваших стеков, он принимает как сопоставление одного перехватчика, так и список сопоставления перехватчиков для добавления сопоставления перехватчиков в список.

 InterceptorListHolder  addInterceptor(InterceptorMapping interceptor);
 InterceptorListHolder  addInterceptors(List<InterceptorMapping> interceptors);

Так что это работает, когда вы указываете только один перехватчик, потому что он работает со ссылкой.

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

person prem30488    schedule 17.08.2014