如何解决有关请求范围的jsf基本问题
| 我认为这是一个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向前了吗?)
public CreateAccountBean() {
init();
}
@PostConstruct
public void init() {
userLoginVo = new UserLoginVo();
logger.info(\"init called\");
}
如果再次打开我的登录页面并再次转到createAccount页面,则不再调用init,并且我不明白为什么...具有请求范围,在这种情况下应该重新初始化,对吗?
您能解释一下为什么失败吗?
谢谢。
解决方法
使您的JSF脱离
/WEB-INF
,并立即链接到它。
对于初始化失败,可能是从浏览器缓存而不是从服务器提供页面。创建一个映射到<servlet-name>facesServlet</servlet-name>
上的Filter
,并以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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。