No Managed Bean, direcionar de acordo com o acesso realizado: desktop ou dispositivo móvel

Olá turma!

Estou trabalhando com JSF 2 + Primefaces 3.0 + Primefaces mobile 0.9.1 (ou seja, as versões mais recentes).

Ao executar o login na aplicação, preciso descobrir se o acesso é originado de um desktop ou dispositivo móvel, para assim direcionar para páginas distintas, uma desenvolvida com PrimeUI e outra com PrimeMobile.

Não encontrei em pesquisas na web e neste forum algo para auxiliar.

Portanto, venho lhes pedir esta ajuda.

Vicente de Paula :slight_smile:

Segue a solução encontrada.

Classe que retornará true caso o user-agent mostre ser o cliente um dispositivo móvel:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.context.FacesContext;

public class DetectarCliente {
    
    private final static String MOBILE_DEVICE_DETECTION_PARAM = "primefaces.mobile.DEVICE_DETECTION";
    
    public static boolean ClienteMovel(String userAgent) {
        Pattern pattern = Pattern.compile("(iPhone|iPad|iPod|Android|BlackBerry|Opera Mobi|Opera Mini|IEMobile)");
        Matcher matcher = pattern.matcher(userAgent);
        
        return matcher.find();
    }
    
}

E no Managed Bean, direciono para onde quero dentro do método de login:

            String userAgent = FacesContext.getCurrentInstance().getExternalContext().getRequestHeaderMap().get("User-Agent");

            if (DetectarCliente.ClienteMovel(userAgent) == true) {
                return "main_mobile";
            } else {
                return "main";
            }

Vicente de Paula :slight_smile: