Struts 2.5.18
У меня проблема с настройкой заголовка в перехватчике Struts 2, и клиент не получает заголовок обратно.Я использую точно такой же перехватчик в другом проекте Struts 2. Без проблем.
Я наткнулся на этот пост Как настроить заголовки ответа HTTP в перехватчике Struts2? , у которого была та же проблемаи разрешил его, переключив получение ответа с ServletActionContext.getResponse()
на получение его из контекста вызова invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE)
Это привело к тому же результату, что заголовок все еще не отправлялся обратно в браузер.Я использую инструменты разработчика для мониторинга заголовка ответа, и его нет.
Кроме того, я помещаю отладочное сообщение сразу после вызова setHeader () в ответе, чтобы увидеть, содержал ли ответ новый заголовок, используяcontainsHeader ().containsHeader () приводит к FALSE, как будто setHeader вообще не работает.
Есть ли у кого-нибудь предложения о том, что может происходить с объектом ответа?Метод intercept () ниже
public String intercept(ActionInvocation invocation) throws Exception {
String result = invocation.invoke();
Boolean hasValidationErrors = Boolean.FALSE;
Object action = invocation.getAction();
if(action instanceof ValidationAware) {
ValidationAware validationAware = (ValidationAware) action;
hasValidationErrors = validationAware.hasErrors();
}
HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
response.setHeader(VALIDATION_FLAG_HEADER_NAME, String.valueOf(hasValidationErrors));
if (log.isDebugEnabled()) log.debug("Does response contain new header? " + response.containsHeader(VALIDATION_FLAG_HEADER_NAME));
return result;
}
Обновление: рабочий код после применения исправления Дейва
public String intercept(ActionInvocation invocation) throws Exception {
invocation.addPreResultListener((actionInvocation, resultCode) -> {
// perform operation necessary before Result execution
Boolean hasValidationErrors = Boolean.FALSE;
Object action = invocation.getAction();
if(action instanceof ValidationAware) {
ValidationAware validationAware = (ValidationAware) action;
hasValidationErrors = validationAware.hasErrors();
}
HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
response.setHeader(VALIDATION_FLAG_HEADER_NAME, String.valueOf(hasValidationErrors));
if (log.isDebugEnabled()) log.debug("Does response contain new header? " + response.containsHeader(VALIDATION_FLAG_HEADER_NAME));
});
return invocation.invoke();
}