Detecção de navegador do cliente em Vaadin
-
25-09-2019 - |
Pergunta
Quero definir temas diferentes para o meu aplicativo Vaadin, dependendo do agente do usuário. Em particular, quero distinguir pelo menos entre dispositivos móveis (iPhone, Android, ...) e navegador da web da área de trabalho.
A API de Vaadin revela duas classes interessantes:
BrowserInfo
parece fazer o trabalho perfeitamente para minhas necessidades, mas falha em instantar através de seu get
-método:
SEVERE: javax.servlet.ServletException: ...
Caused by: java.lang.UnsatisfiedLinkError: com.vaadin.terminal.gwt.client.BrowserInfo.getBrowserString()Ljava/lang/String;
Não foi possível encontrar uma maneira de acessar WebBrowser
De dentro do meu aplicativo também.
- Eu escolhi a abordagem certa para a distinção do navegador?
- Por que o acesso
BrowserInfo
falhou?
Solução
Como o @quickanalysis apontou, você está ciente da separação de componentes do lado do cliente/servidor.
Para colocar a sequência do agente do usuário no lado do servidor, o seguinte snippet de código faz o trabalho:
ApplicationContext context = this.getContext();
if (context instanceof WebApplicationContext) {
String userAgent = ((WebApplicationContext)this.getContext()).
getBrowser().getBrowserApplication();
}
Outras dicas
De que classe você está tentando chamar esse método? O navegador está disponível no lado do cliente como Webbrowser AR no lado do servidor. Dê uma olhada na nomes do pacote.