Перехватчик: actionInvocation.invoke () без возврата, но он также переходит к представлению - PullRequest
0 голосов
/ 12 января 2019

Я использую Struts2 для создания платформы входа. Я использую Interceptor, расширяет MethodFilterInterceptor. В методе doIntercept я использую «actionInvocation.invoke ()» вместо «return actionInvocation.invoke ()». Но это также работает.

распорки-2.5.18

public class loginInterceptor extends MethodFilterInterceptor {
    @Override
    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
        if (ServletActionContext.getRequest().getSession().getAttribute("user") != null){
            actionInvocation.invoke();
        }
        return null;
    }
}

Я думаю, потому что метод возвращает нуль, он не должен переходить к представлению. Тем не менее, это так.

1 Ответ

0 голосов
/ 13 января 2019

Пожалуйста, смотрите документацию "Написание перехватчиков" .

Важная часть:

[...] invoke вернет после того, как был вызван результат (например, после рендеринга вашего JSP), что делает его идеальным для таких вещей, как шаблоны открытого сеанса в представлении , Если вы хотите что-то сделать до вызова результата, вы должны реализовать PreResultListener.

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

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

...