2010-02-02 24 views
5

Quiero establecer diferentes temas para mi aplicación Vaadin, dependiendo del agente de usuario. En particular, quiero distinguir, al menos, entre dispositivos móviles (iPhone, Android, ...) y el navegador web de escritorio.Detección del navegador del cliente en Vaadin

API de Vaadin revela dos clases interesantes:

BrowserInfo parece hacer el trabajo perfectamente para mis necesidades, pero falla en la creación de instancias a través de su get -method:

SEVERE: javax.servlet.ServletException: ... 
Caused by: java.lang.UnsatisfiedLinkError: com.vaadin.terminal.gwt.client.BrowserInfo.getBrowserString()Ljava/lang/String; 

No se pudo encontrar una forma de acceder al WebBrowser desde mi aplicación.

  1. ¿Elegí el enfoque correcto para la distinción de navegadores?
  2. ¿Por qué falla el acceso a BrowserInfo?

Respuesta

10

Como señaló @quickanalysis, debe tener en cuenta la separación de los componentes del lado cliente/servidor.

Para la obtención de la cadena de agente de usuario en el lado del servidor, el siguiente fragmento de código se encarga del trabajo:

ApplicationContext context = this.getContext(); 
if (context instanceof WebApplicationContext) { 
    String userAgent = ((WebApplicationContext)this.getContext()). 
getBrowser().getBrowserApplication(); 
} 
2

¿De qué clase está tratando de llamar a este método? BrowserInfo está disponible en el lado del cliente como WebBrowser en el lado del servidor. Eche un vistazo al nombre del paquete.

+0

señalarme a las diferencias entre cliente/servidor componentes ayudaron. ¡Gracias! (+1 para eso) –

Cuestiones relacionadas