2012-04-17 55 views
2

我創建了SessionListener,但它不起作用,因爲我不知道如何在faces-config.xml中註冊它。我試過如下:jsf - 在faces-config中註冊SessionListener

SessionListener

public class SessionListener implements HttpSessionListener { 

@Override 
public void sessionCreated(HttpSessionEvent arg0) { 


    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    String param = request.getParameter("language"); 


    IDAdminLanguage idl = (IDAdminLanguage) JSFUtils.resolve("#{languageBean}"); 

    if (param != null && param.length() > 0) { 
     idl.setLanguage(param); 
    } else { 
     idl.setLanguage("de"); 
    } 
} 

@Override 
public void sessionDestroyed(HttpSessionEvent arg0) { } 

}

面孔,配置

<listener> 
    <listener-class>ch.idadmin.util.SessionListener</listener-class> 
</listener> 
+0

您的代碼中存在一個主要的錯誤。在創建會話期間'FacesContext'不一定可用。不要在'HttpSessionListener'中使用'FacesContext'。或者,不要使用'HttpSessionListener',而是使用'IDAdminLanguage'的(後)構造函數。 – BalusC 2012-04-17 11:52:16

回答

3

悠需要添加web.xml該配置(而不是在faces- config.xml)

<web-app ...> 
     <listener> 
     <listener-class>ch.idadmin.util.SessionListener</listener-class> 
    </listener> 
</web-app>