我想根据用户代理为我的Vaadin应用程序设置不同的主题。 特别是我想至少区分移动设备(iPhone,Android,...)和桌面网络浏览器。
Vaadin的API揭示了两个有趣的类:
BrowserInfo
似乎完全符合我的需求,但是通过get
- 方法实现了失败:
SEVERE: javax.servlet.ServletException: ...
Caused by: java.lang.UnsatisfiedLinkError: com.vaadin.terminal.gwt.client.BrowserInfo.getBrowserString()Ljava/lang/String;
无法从我的应用程序中找到访问WebBrowser
的方法。
BrowserInfo
会失败?答案 0 :(得分:10)
正如@quickanalysis指出的那样,你必须意识到客户端/服务器端组件的分离。
为了在服务器端获取用户代理字符串,以下代码片段完成了这项工作:
ApplicationContext context = this.getContext();
if (context instanceof WebApplicationContext) {
String userAgent = ((WebApplicationContext)this.getContext()).
getBrowser().getBrowserApplication();
}
答案 1 :(得分:2)
您尝试将此方法称为哪个班级? BrowserInfo在客户端可用作WebBrowser和服务器端。看看包命名。