views:

352

answers:

2

I want to set different themes to my Vaadin application, depending on the user agent. In particular I want to distinguish at least between mobile devices (iPhone, Android,...) and desktop web browser.

Vaadin's API reveals two interesting classes:

BrowserInfo seems to do the job perfectly for my needs, but fails on instancing via its get-method:

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

Couldn't find a way to access WebBrowser from within my application either.

  1. Did I choose the right approach for browser distinction?
  2. Why does accessing BrowserInfo fail?
+1  A: 

From what class you are trying to call this method? The BrowserInfo is available at client-side as WebBrowser ar the server-side. Take a look at the package naming.

quickanalysis
Pointing me to the differences between client/server components helped. Thx! (+1 for that)
Gerhard Dinhof
+2  A: 

As @quickanalysis pointed out, you've to be aware of the separation of client-/server-side components.

For getting the user agent string on server-side, the following code snippet does the job:

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

related questions