Vaadin 是一个使用UI组件来构建Web应用的多语言框架,最近发布了 Vaadin Spring 项目的 1.1版本 。
在Vaadin的 Navigator
类和 View
接口方面,有两个新的特性:
SpringNavigator
类 @SpringViewDisplay
注解
SpringNavigator
类极大地“简化了视图的配置”, @SpringViewDisplay
注解能够用来“标记目标Vaadin组件,指定了我们的视图要实际展现的地方。”
另外,还有一些 缺陷修正 ,包括使用Vaadin Spring来序列化HTTP session。
如下的代码片段展示了如何使用 SpringNavigator
类和 @SpringViewDisplay
注解:
// MainUI.java @SpringUI @Theme("valo") public class MainUI extends UI { MainViewDisplay mainContent; public MainUI(MainViewDisplay mainContent,SpringNavigator navigator) { this.mainContent = mainContent; navigator.setErrorView(ErrorView.class); } /// 其他的支撑代码... }
// MainViewDisplay.java @SpringViewDisplay public class MainViewDisplay extends Panel implements ViewDisplay { public MainViewDisplay() { setStyleName(ValoTheme.PANEL_BORDERLESS); } @Override public void showView(View view) { // 假设视图是组件,通常都会这样 setContent((Component)view); } }
在GitHub上的完整项目包含了上述Java文件源码的 变更集合 ,阐述了用来实现导航和视图管理功能的更简洁的代码。
InfoQ与 Matti Tahvonen 进行了交流,他是Vaadin的产品市场主管,讨论了这次版本相关的情况。
Tahvonen:我的官方职位是Vaadin框架和相关OS库(如Vaadin Spring)的产品市场主管,但是我的工作更像是针对开发者的宣传人员。我撰写版本发布博客、编写使用Vaadin与其他有趣Java技术进行集成的样例项目、发布技术文章、主办webinar、参加会议(参与演讲和作为展台工作人员)、帮助新用户和客户进行Vaadin开发并帮助我们的工程师以及其他人员进行技术营销工作。我对OSS非常有热情,非常荣幸我能够从事OS相关的工作,而我的同事会负责Vaadin相关的商业扩展。
Tahvonen:Vaadin对Web技术有着最强的抽象。使用Vaadin框架编写应用并不需要我们接触一行JS、HTML或CSS代码(如果你想这样做的话,也是可以的),我们也不需要理解浏览器的技巧或各种形式的HTTP通信技术(如基本HTTP、表单提交、AJAX、服务端推送、WebSocket等)。如果你想编写自定义扩展的话,才需要接触底层的Web编程技术,我们有很活跃的社区和 上百个add-on ,所以这种场景是很少见的。在最常见的情况下,我们只需使用简单的Java和基于组件的编程模型,这样能让开发更简单和高效。具有桌面UI(Swing、SWT、JavaFX)经验的开发人员或后端开发人员对于Vaadin会感到特别兴奋,不过也有PHP背景的人对Vaadin非常感兴趣。
Tahvonen:最近这段时间以来,这是一个非常常见的问题。Vaadin对微服务适配得非常好,一般而言,应用中始终会有UI,至少会存在某种形式的UI。在UI方面,会有多种策略,最佳方案要取决于你的需求。如果你的服务中具有UI,或者使用Vaadin + (REST)服务来构建管理端UI,让这些服务供其他的应用消费,那么Vaadin非常适用于这种场景。另外,Java也是消费REST服务的理想工具(没有同源的限制),在创建mash-up应用的时候,会消费多个微服务的数据,所以在这种情况下,Vaadin也能运行良好。
最近,很多用户都提出了这个问题,我们决定针对这个话题编写一些内容和样例。我和我的同事 Alejandro 已经编写了 第一篇文章 。后续还有很多内容和样例要发布。
Tahvonen:毫无疑问,Vaadin 8是接下来最重要的事情。在Vaadin中,当前的一些API起源非常早,那个时候还没有lambdas表达式,这些API甚至要早于泛型或JDK中特有的集合框架。Vaadin 8将会是一个巨大的进步,会让代码更加类型安全、易于编写,在CPU和内存使用方面会更加高效。对于Vaadin Spring来说,也会有更新的版本。
因为我们非常重视向后兼容性(大多数的Vaadin应用会长期维护),我们准备了一个兼容包,借助它能够非常容易地进行升级,你可以渐进式采用新的API。同时,Vaadin 7版本将会继续支持,因为我们的一些客户还不能迁移到Java 8上,有些甚至还要支持IE 8。
我们目前处于beta阶段,第一个beta版本在圣诞节假期前已经发布:
https://vaadin.com/blog/-/blogs/vaadin-8-beta-is-out-we-need-your-help-
至于Vaadin Spring,我们计划为Spring Security提供一些辅助功能。大多数的Vaadin Spring用户都会同时使用Spring Security,通过一些更深入的集成,我们相信能够让客户的起步更简单一些。
Tahvonen:在着手评估Vaadin的时候,很多开发人员都会担心这个问题。我建议他们亲自尝试一下。如果session存储在服务器的内存中(通常如此),服务器的基本访问是很快的,除非服务器的位置在地球的另一端。我们可以看一下如今的Google搜索,每当键盘按下的时候,它都会访问服务器,但它依然非常流畅。
在与亚马逊的专家一起构建的一个样例中,我们使用了他们的地理负载均衡功能,成功玩了一个基于Vaadin的俄罗斯方块游戏,它运行在一个位于悉尼的EC2微实例上(我位于芬兰)。此时,它已经不是那么流畅了(相对于部署在同一个大洲的服务器来说),但是对于正常的业务应用来说,它能够运行地非常好。通过启用WebSocket,我们持续地开启通信通道(在Vaadin中,需要添加一项依赖并且要在 UI
类上添加 @Push
注解),这样能够进一步减少延迟。
除了服务器往返(roundtrip)所造成的延迟,人们还应关注浏览器渲染所造成的延迟,以及执行实际的业务逻辑或数据库查询所造成的延迟,这一点与使用Angular和React是相同的。不管是Vaadin还是客户端的UI框架,我都建议为长时间运行的查询展示一些进度指示器或对话框,不要让UI看起来像停滞了一样。
Tahvonen和 Stéphane Nicoll 最近录制了一个 webinar ,展现了如何使用Vaadin和Spring来构建Java Web应用。
查看英文原文: New Vaadin Spring Release Introduces Enhanced View Management