我认为这是一个jsf基本问题,但我只是需要一点解释..
我有一个登录页面,其中有一个指向CreateAccount页面的链接:
<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
范围的辅助bean。 第一次我去创建帐户页面,构造函数调用init方法(由于某种原因@PostConstruct没有自动调用,这就是我从构造函数调用它的原因...也许是因为jsp forward ?)
public CreateAccountBean() {
init();
}
@PostConstruct
public void init() {
userLoginVo = new UserLoginVo();
logger.info("init called");
}
如果再次打开我的登录页面并再次转到createAccount页面,则不再调用init,我不明白为什么......有一个请求范围,它应该在这种情况下重新初始化,对吧?
你能解释一下它失败的原因吗?
感谢。
答案 0 :(得分:0)
将您的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);