#struts2 #interceptor #interceptorstack
#struts2 #перехватчик #interceptorstack
Вопрос:
Я хочу иметь возможность отключить проверку формы для одного действия в Struts 2, но при этом иметь возможность запускать остальной стек перехватчика.
У меня есть перехватчик, который проверяет, вошел ли пользователь в систему, который я всегда хочу выполнить, но для некоторых действий (например, для ввода информации) я не хочу, чтобы вызывалось действие validate
.
Я попытался сделать что-то вроде следующего:
<interceptors>
<interceptor name="bankingAuthenticator"
class="csc309.a4.banking.BankUserAuthenticator"/>
<interceptor-stack name="secureBanking">
<interceptor-ref name="bankingAuthenticator"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureBanking"/>
<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
<result name="success">/banking/Deposit.jsp</result>
<interceptor-ref name="defaultStack">
<param name="workflow.excludeMethods">choose</param>
</interceptor-ref>
</action>
Но он пропускает как bankingAuthenticator
перехватчик, так и проверку.
Комментарии:
1. Правильно; если вы указываете
interceptor-ref
для одного действия, вы должны указать все перехватчики для этого действия! Вы должны добавить свое решение в качестве ответа, а затем принять его, чтобы будущие посетители могли извлечь выгоду из вашей работы 🙂2. в чем разница в коде, который вы написали выше, и в том, который вы написали в ответе… Можете ли вы сказать мне, что я не понял это должным образом…..
3. @NIVESHSENGAR, разница в том, что имя перехватчика в действии по внесению депозита — «defaultStack» в приведенном выше коде и «secureBanking» в коде в ответе.
4. Не могли бы вы, пожалуйста, сказать мне, что здесь выбрано? Находится ли метод внутри where? Я попробовал, как показано ниже. Но это все еще не исключает
<action name="login"> <interceptor-ref name="secureStack"> <param name="workflow.excludeMethods">*</param> </interceptor-ref> <result>login.jsp</result> </action>
Ответ №1:
Я понял это — решение выглядит следующим образом:
<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
<result name="success">/banking/Deposit.jsp</result>
<interceptor-ref name="secureBanking">
<param name="workflow.excludeMethods">choose</param>
</interceptor-ref>
</action>
Параметры перехватчика могут быть ограничены конкретными перехватчиками, добавляя имя перехватчика к имени параметра. В этом случае только workflow
перехватчик исключит choose
метод; другие перехватчики все равно будут запускаться для choose
метода действия.
Комментарии:
1. Потрясающе; рад, что вы это поняли.