我有一个关于会话超时和JSF 2的问题。我的异常处理程序完全按照每个人的喜好,但我需要将值传递给登录页面。例如,我有一个典型的登录URL - www.acme.com/?companyId=company14,它反过来为company14提供了他们自己的自定义登录页面(使用他们的徽标)。在他们进入应用程序并做了一些工作之后,他们会阅读一封电子邮件或2.会话超时并显示会话超时页面,指示用户单击“确定”以进入登录页面。如何将?companyId = company14添加到URL?我可以使用以下代码在异常处理程序中对其进行硬编码:
requestMap.put(“companyId”,“company14”);
然后在viewExpired.xhtml页面上引用它:
<h:panelGrid id="expiredGrid" columns="1">
<f:facet name="header">
<h:outputText id="outExpireMsg" value="Your session has expired"/>
</f:facet>
<h:outputText id="outReqMessage" value="Reloading the page will require login."/>
<h:outputText value=""/>
<h:button id="okButton" type="submit" value="Ok" outcome="login?companyId=#{companyId}"/>
</h:panelGrid>
问题是我似乎无法在没有被会话超时消除的情况下将公司保存在任何地方。我想使用此值在exceptionhandler中设置companyId。有什么想法吗?
答案 0 :(得分:0)
您可以在登录时将其设置为Cookie。
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("path", "/");
externalContext.addResponseCookie("companyId", companyId, properties);
然后你可以按如下方式抓住它:
Cookie cookie = (Cookie) externalContext.getRequestCookieMap().get("companyId");
if (cookie != null) {
String companyId = cookie.getValue();
}
请注意,当服务器端会话到期时,这不会过期。仅在浏览器关闭时才会过期。