2012-04-17 5 views
2

Я создал SessionListener, но он не работает, потому что я не знаю, как зарегистрировать его в faces-config.xml. Я попробовал следующее:jsf - register SessionListener в faces-config

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» не обязательно доступен во время создания сеанса. Не используйте 'FacesContext' в' HttpSessionListener'. Или просто не используйте «HttpSessionListener», а конструктор (post) «IDAdminLanguage». – BalusC

ответ

3

Yuu нужно добавить эту конфигурацию в web.xml (а не в faces- config.xml)

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