6

我想根据用户代理为我的 Vaadin 应用程序设置不同的主题。特别是,我想至少区分移动设备(iPhone、Android 等)和桌面网络浏览器。

Vaadin 的 API 揭示了两个有趣的类:

BrowserInfo似乎可以完美地满足我的需求,但无法通过其get-method 实例化:

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

也找不到WebBrowser从我的应用程序中访问的方法。

  1. 我是否选择了正确的浏览器区分方法?
  2. 为什么访问BrowserInfo失败?
4

2 回答 2

11

正如@quickanalysis 指出的那样,您必须注意客户端/服务器端组件的分离。

为了在服务器端获取用户代理字符串,下面的代码片段完成了这项工作:

ApplicationContext context = this.getContext();
if (context instanceof WebApplicationContext) {
   String userAgent = ((WebApplicationContext)this.getContext()).
getBrowser().getBrowserApplication();
}
于 2010-02-04T07:04:38.523 回答
3

您尝试从哪个类调用此方法?BrowserInfo 在客户端作为 WebBrowser 在服务器端可用。看一下包命名。

于 2010-02-03T09:30:02.970 回答