Jsf 2 如何使用JSF2.0向重定向登录页面添加URL参数

Jsf 2 如何使用JSF2.0向重定向登录页面添加URL参数,jsf-2,Jsf 2,我有一个关于会话超时和JSF2的问题。我的异常处理程序完全按照每个人喜欢的方式工作,但我需要向登录页面传递一个值。例如,我有一个典型的登录URL—www.acme.com/?companyId=company14,它反过来会向company14提供自己的自定义登录页面(使用他们的徽标)。在他们进入应用程序并做一些工作后,他们会阅读一封或两封电子邮件。会话超时,并显示会话超时页面,指示用户单击“确定”进入登录页面。如何将?companyId=company14添加到URL?我可以使用以下方法在异常

我有一个关于会话超时和JSF2的问题。我的异常处理程序完全按照每个人喜欢的方式工作,但我需要向登录页面传递一个值。例如,我有一个典型的登录URL—www.acme.com/?companyId=company14,它反过来会向company14提供自己的自定义登录页面(使用他们的徽标)。在他们进入应用程序并做一些工作后,他们会阅读一封或两封电子邮件。会话超时,并显示会话超时页面,指示用户单击“确定”进入登录页面。如何将?companyId=company14添加到URL?我可以使用以下方法在异常处理程序中对其进行硬编码:

requestMap.put(“公司ID”、“公司14”)

然后在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>


问题是,我似乎无法在任何地方保存公司ID,除非它被会话超时清除。我想使用此值在exceptionhandler中设置companyId。有什么想法吗?

您可以在登录时将其设置为cookie

Map<String, Object> properties = new HashMap<String, Object>();
properties.put("path", "/"); 
externalContext.addResponseCookie("companyId", companyId, properties);

请注意,当服务器端会话过期时,该会话不会过期。只有当浏览器关闭时,此选项才会过期。

有效!我确实需要先使用get to Cookie,然后使用getValue()获取公司id,但其他一切都很好!谢谢
Cookie cookie = (Cookie) externalContext.getRequestCookieMap().get("companyId");

if (cookie != null) {
    String companyId = cookie.getValue();
}