2012-06-19 43 views
1

我有一個關於會話超時和JSF 2的問題。我有我的異常處理程序按照每個人喜歡的方式工作,但我需要將值傳遞給登錄頁面。例如,我有一個典型的登錄網址 - www.acme.com/?companyId = company14,它反過來爲company14提供他們自己的自定義登錄頁面(使用他們的徽標)。在他們進入應用程序並完成一些工作之後,他們會閱讀電子郵件或2.會話超時並顯示會話超時頁面,指示用戶單擊「確定」繼續進入登錄頁面。如何將?companyId = company14添加到URL?我可以使用它在異常處理程序中對其進行硬編碼:如何使用JSF 2.0將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> 

的問題是,我似乎無法在任何地方保存companyId不受會話超時它得到消滅。我想使用此值在exceptionhandler中設置companyId。有任何想法嗎?

回答

0

您可以在登錄時將其設置爲cookie。

Cookie cookie = (Cookie) externalContext.getRequestCookieMap().get("companyId"); 

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

注意,當服務器端會話過期這不會過期:

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

然後你可以如下抓住它。這僅在瀏覽器關閉時纔會過期。

+0

工作正常!我確實必須首先將get轉換爲Cookie,然後使用getValue()獲取公司標識,但其他所有工作都很棒!謝謝!! –

+0

糟糕,我修好了。別客氣。 – BalusC

相關問題