#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);