базовый вопрос jsf об области запроса

#jsf #jsf-1.2

#jsf #jsf-1.2

Вопрос:

Я думаю, что это базовый вопрос jsf, но мне просто требуется небольшое объяснение..

У меня есть страница входа, где у меня есть ссылка на страницу создания учетной записи:

 <div
id="TGOV_popAccount"
style="float: left; margin-left: 60px !important;"><a
href="/createAccount.jsp">Create Account</a></div>
  

Теперь на этой странице jsp открывается страница jsf facelet (да, уродливый дизайн):

createAccount.jsp:

 <jsp:forward page="/WEB-INF/jsf/account/createAccount.jsf" />
  

итак, теперь этот createAccount.jsf имеет CreateAccountBean в качестве резервного компонента с request областью видимости. В первый раз, когда я захожу на страницу создания учетной записи, конструктор вызывает метод init (по какой-то причине @PostConstruct не вызывается автоматически, вот почему я вызываю его из constructor … может быть, из-за этого jsp forward?)

 public CreateAccountBean() {
    init();
}

@PostConstruct
public void init() {
    userLoginVo = new UserLoginVo();
    logger.info("init called");
}
  

Если снова открыть мою страницу входа и снова перейти на страницу createAccount, инициализация больше не вызывается, и я не понимаю почему… Имея область запроса, ее следует повторно инициализировать в этой ситуации, верно?

Можете ли вы объяснить мне, почему это не удается?

Спасибо.

Ответ №1:

Извлеките свой JSF из /WEB-INF и немедленно создайте на него ссылку.

Что касается сбоя инициализации, скорее всего, страница была отправлена из кэша браузера, а не с сервера. Создайте, Filter который отображается на <servlet-name>facesServlet</servlet-name> и выполняет следующую работу в doFilter() методе:

 HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
res.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);