我阅读了许多关于 mojarra 的闪光灯范围问题的主题,直到现在,我无法完全摆脱这些烦人的
“在我们尝试为闪存设置传出 cookie 时,响应已经提交。存储到闪存的任何值在下一次请求时都将不可用。”
导致很多头痛的消息。
我阅读了诸如自定义 cookie 或请求参数之类的解决方法,但我感觉不太好,因为这种基本的东西在很长一段时间内都无法接受。
当前环境:
- mojarra 2.2.13
- omnifaces 1.12.1
- tomcat 8.0.32
有人可以确认,最新的 mojarra 仍然会发生这种情况吗?我以前的 mojarra 版本也有这些问题 - 有时它有效,有时无效。无论如何,该消息仅在登录后出现一次,但创建的 cookie“csfcfc”永远不会被删除,并且现在每个请求都会出现警告。
由于其他问题,目前无法切换到 myfaces。
我的简单案例,真的没什么特别的吗?:
@ManagedBean
public class LoginBean implements Serializeable {
public String login(){
String nextPage = null;
//...
if (dataOk){
Messages.addFlashGlobalInfo("welcome");
nextPage = "/user/dashboard?faces-redirect=true";
}
return nextPage;
}
}
@ViewScoped
public class DashboardBean implements Serializeable {
@PostConstruct
protected void init(){
//....
initData();
}
}
主模板.xhtml:
<h:body>
<f:view>
<div class="content">
<h:panelGroup id="messages">
<h:panelGroup layout="block" rendered="#{not empty facesContext.messageList}">
<o:messages globalOnly="true" escape="false" infoClass="alert-success alert-dismissable" />
</h:panelGroup>
</h:panelGroup>
<ui:insert name="content"/>
</div>
</f:view>
</h:body>
登录.xhtml
<h:commandButton action="#{LoginBean.login}" id="btn-login" value="Login">
</h:commandButton>