Início > Programação > Como e Onde Coletar e Gravar Dados de Navegação do Usuário utilizando JSF

Como e Onde Coletar e Gravar Dados de Navegação do Usuário utilizando JSF

A interface HttpSessionListener deve ser implementada por classes que querem ser notificadas quando ocorrerem eventos relacionados ao ciclo de vida de uma HttpSession. É possível utilizar esse listener para gravar dados de navegação do usuário acumulados durante a sessão. Sim, o Google Analytics é utilizado para contabilizar visualizações de página, mas ele te engessa se você tentar utilizá-lo para algo que precise ser muito granular.

Primeiro, você precisa de um bean com escopo de sessão para acumular os dados de navegação do usuário:

@ManagedBean
@SessionScoped
public class SessionNavigationUserData {
         public List<NavigationUserData> userDatas;
}

Um bom lugar para recuperar e usar esse bean de sessão que irá acumular os dados de navegação é o PhaseListener, que é uma abstração que recebe o início e o fim do processamento para cada fase padrão do ciclo de vida de processamento das requisições JSF:

public class ViewPhaseListener implements PhaseListener {

	@Override
	public void afterPhase(PhaseEvent event) {
	}

	@Override
	public void beforePhase(PhaseEvent event) {
            // recuperar bean de sessao
            HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
            SessionNavigationUserData sessionMB = ManagedBeanUtil.getSessionBean(request, SessionNavigationUserData.class, true);
            // armazenar os dados de navegacao do usuario... 
	}

	@Override
	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}

}

Para ser utilizado, o listener deve ser registrado no arquivo faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
	<lifecycle>
		<phase-listener>br.com.projeto.jsf.ViewPhaseListener</phase-listener>
	</lifecycle>
</faces-config>

Agora, vamos criar uma classe que implementa HttpSessionListener e grava os dados de navegação do usuário acumulados em sua sessão:

public class SessionListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
            HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
            SessionNavigationUserData sessionMB = ManagedBeanUtil.getSessionBean(request, SessionNavigationUserData.class, true);
            List<NavigationUserData> userDatas = sessionMB.userDatas;
            userService.save(userDatas);
	}
}

Para ser utilizado, o listener deve ser registrado no web.xml:

	<listener>
		<display-name>SessionListener</display-name>
		<listener-class>br.com.projeto.jsf.SessionListener</listener-class>
	</listener>
Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: