Сервлет doFilter setAttributes недоступен в сервлете - PullRequest
0 голосов
/ 11 декабря 2011

Я пытаюсь добавить атрибут к запросу через doFilter перед передачей его сервлету, чтобы было установлено значение в JSTL. Я просто делаю req.setAttribute("b", "blah") в фильтре, но он не устанавливается в файле JSTL. Как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2011

Трудно определить первопричину, не видя код.Существует несколько возможных причин.

  • Вы отправляете перенаправление после установки атрибута вместо продолжения с тем же запросом.
  • Вы получаете доступ к атрибуту с неправильным именем (чувствителен к регистру!).
  • Вы обращаетесь к атрибуту неверным способом.
  • Атрибут был переопределен где-то еще ниже при обработке запроса.
  • Есть область видимости страницыатрибут с тем же именем, который не имеет значения.
  • Вы неправильно интерпретируете результаты.
  • И т. д.

Кстати, такого понятия, как"Файл JSTL".Возможно, вы имели в виду «файл JSP».

0 голосов
/ 11 декабря 2011

Проблема в том, что метод doFilter использует ServletRequest вместо HttpServletRequest, который имеет метод setAttribute. Большинство моих фильтров примерно такие:

public void doFilter(ServletRequest servletRequest, 
                     ServletResponse servletResponse, 
                     FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;                                                                      

    // do what you must...

    chain.doFilter(servletRequest, servletResponse);

}
...