vaadin_Vaadin附加组件和Maven

vaadin

介绍

我喜欢Vaadin的 (其中很多)一件事是它对Vaadin框架的“附加组件”社区-他们称之为Vaadin目录 。 “附加组件”是社区对框架的附加组件,可以是任何东西,例如从新的客户端小部件到数据表的延迟加载容器。 我一定会为Activiti看到类似的东西!

Vaadin小部件基本上是预编译的GWT小部件。 GWT窗口小部件本身是Java类,但是GWT编译器将它们编译为可在所有浏览器上使用的Javascript。 因此,当您想在Vaadin Web应用程序中使用某个附加组件(具有新的客户端视觉效果)时,由于必须在Webapp中包含新的Javascript,因此您必须自己对其进行编译。

如果您使用的是Vaadin Eclipse插件 ,那么一切都会好起来的。 只需将加载项jar添加到您的项目中,插件即可自动检测并编译新的小部件。 但是,当您使用Maven构建Web应用程序时,并不是那么简单。 但是根本不需要扔掉Maven并手动复制所有依赖项jar。 毕竟是2011年。

在我看来,在Maven中进行GWT编译的默认方法效率不高。 因此,让我指导您完成最适合我的设置,以及如何调整Maven pom.xml。
对于不耐烦的人:在github上查看源代码: https : //github.com/jbarrez/vaadin-mvn-addon

使用Maven创建新的Vaadin Webapp

该步骤已被详细记录,只需检查Vaadin Wiki 。
简短版本:使用以下原型:

mvn archetype:generate -DarchetypeGroupId=com.vaadin-DarchetypeArtifactId=vaadin-archetype-clean -DarchetypeVersion=6.5.6 -DgroupId=com.jorambarrez -DartifactId=vaadin-mvn-addon -Dversion=1.0 -Dpackaging=war

添加附加组件

在这个示例webapp中,我将使用两个很酷的Vaadin附加组件:

  • Paperstack :一个允许将组件显示为书页的容器
  • 刷新 :客户端组件,轮询服务器以进行UI更改

这两个插件都有新的客户端小部件,因此绝对需要通过GWT编译器运行。

调整pom.xml

打开pom.xml。 原型已经生成了使用自定义加载项所需的全部内容。 查找已注释的部分,然后取消注释。 这就是全部。

创建网络应用

以下Vaadin Webapp展示了这两个组件的简单用法。 我们将只显示“ Activiti”,并将每个字符显示在Paperstack组件的新页面上。 我们还有一个按钮,它将使用Refresher组件和服务器端线程自动翻动页面:

public class MyVaadinApplication extends Application {private static final String DISPLAYED_WORD = "ACTIVITI";private Window window;private Refresher refresher;private Button goButton;private PaperStack paperStack;@Overridepublic void init() {window = new Window("My Vaadin Application");setMainWindow(window);initGoButton();initPaperStack();}private void initGoButton() {goButton = new Button("Flip to the end");window.addComponent(goButton);goButton.addListener(new ClickListener() {public void buttonClick(ClickEvent event) {goButton.setEnabled(false);startRefresher();startPageFlipThread();}});}private void startRefresher() {refresher = new Refresher();window.addComponent(refresher);refresher.setRefreshInterval(100L);}private void startPageFlipThread() {Thread thread = new Thread(new Runnable() {public void run() {goButton.setEnabled(false);int nrOfUpdates = DISPLAYED_WORD.length() - 1;while (nrOfUpdates >= 0) {paperStack.navigate(true);nrOfUpdates--;try {Thread.sleep(2000L);} catch (InterruptedException e) {e.printStackTrace();}}// Remove refresher when done (for performance)goButton.setEnabled(true);window.removeComponent(refresher);refresher = null;}});thread.start();}private void initPaperStack() {paperStack = new PaperStack();window.addComponent(paperStack);for (int i=0; i<DISPLAYED_WORD.length(); i++) {VerticalLayout verticalLayout = new VerticalLayout();verticalLayout.setSizeFull();paperStack.addComponent(verticalLayout);// Quick-hack CSS since I'm to lazy to define a styles.cssLabel label = new Label("<div style=\"text-align:center;color:blue;font-weight:bold;font-size:100px;text-shadow: 5px 5px 0px #eee, 7px 7px 0px #707070;\">" + DISPLAYED_WORD.charAt(i) + "</div>", Label.CONTENT_XHTML);label.setWidth(100, Label.UNITS_PERCENTAGE);verticalLayout.addComponent(label);verticalLayout.setComponentAlignment(label, Alignment.MIDDLE_CENTER);}}

调整web.xml

为了使Vaadin了解自定义加载项,请在Vaadin Application Servlet中添加以下几行:

<init-param><param-name>widgetset</param-name><param-value>com.jorambarrez.CustomWidgetset</param-value>
</init-param>

另外,在包com.jorambarrez(无论你已经把在web.xml匹配)添加文件“CustomWidgetset.gwt.xml”。 只需复制以下几行,而不必担心将附加的GWT描述符放在那里(这是合乎逻辑的),Maven插件会在附加的jar中自动找到它们。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC"-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN""http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module><inherits name="com.vaadin.terminal.gwt.DefaultWidgetSet" />
</module>

运行网络应用

转到您的项目,并执行以下命令:

mvn clean package jetty:run

这将启动Jetty网络服务器并部署我们的Web应用程序。 现在,您应该可以使用webapp了。

问题

运行前面的命令时,您将看到GWT编译器启动并编译自定义窗口小部件。 问题是,GWT编译器确实花了一些时间来完成其魔术工作(在我的机器上为1.30分钟,而仅启动Jetty则需要5秒)。

当我想运行我的应用程序时,我不会坐下来看着GWT编译器每隔一段时间就在我的加载项上撒上小精灵。 当然, JRebel可以在这里提供很多帮助,但是绝对不必每次都编译我的小部件 。 毕竟,我完全不会更改这些附加组件。

调整pom.xml(续集)

因此,我们刚刚了解到,Vaadin原型生成的默认pom.xml在加载项方面并不友好。 如果您查看GWT编译器插件的配置,您会注意到已编译的窗口小部件将添加到目标文件夹中,而不是添加到项目源中:

<webappDirectory> $ {project.build.directory} / $ {project.build.finalName} / VAADIN / widgetsets </ webappDirectory>

如果将其更改为源文件夹:

<webappDirectory> src / main / webapp / VAADIN / widgetsets </ webappDirectory>

GWT编译的结果放在我的webapp的源代码中。 这也意味着我可以将它们与我的Webapp的其余部分一起签入。

现在我们唯一需要做的就是确保我们不会在每次运行时都重新编译小部件。 我选择将其简单地放入配置文件中,如下所示:

<profiles><profile><id>compile-widgetset</id><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>gwt-maven-plugin</artifactId>....

现在,无论何时将新的附件添加到项目中,我现在都运行以下命令:

mvn -Pcompile-widgetset干净编译

它将编译所有加载项,并将结果放入我的源文件夹中。 现在,如上所示运行Jetty网络服务器,现在只需将这些源复制到war文件中,即可将启动时间再次减少至最少(此处为5秒)。

资源

以上步骤中所述的整个Web应用程序可在GitHub上完全使用: https : //github.com/jbarrez/vaadin-mvn-addon

结论

在Maven中使用加载项并不难,所有这些都有据可查(如Vaadin中的所有内容)。 但是,Maven原型生成的Maven配置效率不高,因为它会在每次运行时重新编译附加窗口小部件。 上面的步骤显示了如何调整配置,使其更适合真正的快速开发!

欢迎任何意见或改进!

参考: 如何:我们的JCG合作伙伴 Joram Barrez的 Vaadin插件和Maven在“ 大脚小步”博客上

相关文章 :

  • 将Maven与Ivy集成
  • OSGi将Maven与Equinox结合使用
  • Java模块化方法–模块,模块,模块
  • GWT EJB3 Maven JBoss 5.1集成教程
  • 建立自己的GWT Spring Maven原型
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/vaadin-add-ons-and-maven.html

vaadin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beta版本冲刺第二天

队伍CleanCode 031302505 黄晓辉031302223 翁瀚帅031302511 林培兴031302632 张衍坤031302536 苏丽玲一.完成的情况&#xff1a; 继续熟悉了github的使用&#xff0c;开始配置Tomcat服务器环境&#xff0c;增加了号码百事通的号码和游玩福州的一些资料&#xff0c;想要改进α版…

多线程编程反模式_编程反模式

多线程编程反模式您是否曾经进行过代码审查&#xff0c;记录了非常高的WTF / m&#xff1f; 您是否想知道所有这些错误代码的原因是什么&#xff1f; 在大多数情况下&#xff0c;导致原因1的原因是使用设计和编码反模式。 如果您喜欢定义&#xff0c;请参见以下内容&#xff1…

数据挖掘10大算法详细介绍

想初步了解下怎样数据挖掘&#xff0c;看到一篇不错的文章转载过来啦~ 转自:http://blog.jobbole.com/89037/ 在一份调查问卷中&#xff0c;三个独立专家小组投票选出的十大最有影响力的数据挖掘算法&#xff0c;今天我打算用简单的语言来解释一下。 一旦你知道了这些算法是什么…

孙叫兽带你了解腾讯位置服务的认证与接入,多种行业方案参考!

前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。 目录 接入指南 地图组件(H5) 地图javaScri

svn切换分支 如何判断 是否完成_SVN创建分支/合并分支/切换分支

在建立项目版本库时&#xff0c;可首先建好项目文件夹&#xff0c;并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发trunk是主分支&#xff0c;是日常开发进行的地方。branches是分支。一些阶段性的release版本&#xff0c;这些版本是可以继续进行…

圣诞节,程序员应该给女朋友送一个线上圣诞树

前言:圣诞节虽然不是中国的传统节日,但当下很多时髦的年轻人却很喜欢过这个欢乐的节日,并乐于打造参与属于这个节日的仪式感。 除了所知的圣诞老人、圣诞树、互送礼物、吃大餐等传统习俗外,其实程序员能为今天的节日增加一些特别的环节。 圣诞树下载:https://download.csd…

maven 按业务拆分模块_Maven模块拆分方法

一个大项目经常要拆分成多个小模块分开打包&#xff0c;Maven是可以支持模块拆分的。可以包含(父模块即项目包含子模块)&#xff0c;也可以并行(父模块和子模块是平级的)。推荐用包含方式&#xff0c;更清晰&#xff0c;更简单一些。首先建个空项目&#xff0c;只要个pom.xml&a…

用户注册,报修

一、需求分析 &#xff08;1&#xff09;还没有注册的客户&#xff0c;可以进入注册界面进行注册。 &#xff08;2&#xff09;新建一个报修表&#xff0c;名字为repair_info0&#xff0c;列有用户名、报修类型、报修地点、报修内容&#xff0c;报修日期和时间、用户报修次数。…

在HTML中使用css3实现雪人动画效果

背景:圣诞节又到了,拿什么来哄女朋友开心? 项目结构: html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht…

圣诞节又到了,作为程序猿的我用代码给女朋友送了一个礼物

圣诞节又到了&#xff0c;拿什么来哄女朋友开心&#xff1f;我们先来做一个简单的雪人动画&#xff1a;项目结构&#xff1a;html:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d…

【Linux】权限篇(二)

权限目录 1. 前言2. 权限2.1 修改权限2.2 有无权限的对比2.3 另外一个修改权限的方法2.3.1 更改用户角色2.3.2 修改文件权限属性 3. 第一个属性列4. 目录权限5. 默认权限 1. 前言 在之前的一篇博客中分享了关于权限的一些知识&#xff0c;这次紧接上次的进行&#xff0c;有需要…

孙叫兽重磅推荐Chrome插件——CSDN浏览器助手

导读:解决你在浏览器上遇到的各种问题,无论你是学生小白、还是职场老鸟,都可以借助这个插件,打造个性化浏览器,提升工作学习效率。 此插件经过多轮迭代,体积小,内存占用少,便于开发者快速安装和使用。 官方地址:https://plugin.csdn.net/ 目录 安装方法:

【APICloud系列|21】使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。

导读:APICloud是柚子(北京)科技有限公司创建的低代码开发平台,总部位于北京, 通过生产力工具与混合开发技术,为企业与开发者构建高效的IT环境;在APICloud平台已有80万注册用户,平台每日生成安装包超6000个。业务团队延伸至上海、深圳、重庆、青岛等10余个城市。 APICloud是…

数据湖 多维数据集_按汇总分组/多维数据集

数据湖 多维数据集时不时地&#xff0c;您会遇到一个使您达到SQL限制的要求。 我们中的许多人可能会早早放弃并使用Java / [或您的语言]计算内容。 相反&#xff0c;使用SQL可能是如此简单快捷。 如果您使用的是高级数据库&#xff0c;例如DB2 &#xff0c; Oracle &#xff0c…

FlexyPool如何同时支持连接代理和装饰器

代理人 FlexyPool监视连接池使用情况&#xff0c;因此需要拦截连接关闭方法调用。 为了简单起见&#xff0c;第一个版本为此目的依赖动态代理&#xff1a; private static class ConnectionInvocationHandler implements InvocationHandler {public static final String CLOS…

集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍...

1 创建集合视图&#xff0c;设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器&#xff0c;系统默认管理着一个集合视图UICollectionView&#xff0c;功能几乎和UITableViewController差不多&#xff0c;能够以多行多列的…

【APICloud系列|24】 MNNavigationMenu模块(导航菜单)的实现

导读:MNNavigationMenu 是一个导航栏菜单,开发者可自定义其中的样式和按钮个数,超出屏幕部分可左右拖动查看。 模块详情:http://www.apicloud.com/mod_detail/12417 index.html <!doctype html> <html> <head><meta charset="utf-8">&…

mysql2教程_mySQL 教程 第2章 安装和介绍mySQL

设置mySQL字符集支持中文的字符集是utf8&#xff0c;该设置可以更改mySQL配置文件进行全局设置&#xff0c;也可以针对数据库设置&#xff0c;也可以针对表设置&#xff0c;也可以针对列设置。字符集更改后新插入的数据生效&#xff0c;对以前不生效。练习1&#xff1a;更改MyS…

java 更新订单状态_Java 8状态更新

java 更新订单状态即将到来的Java SE 8发行版的两大新语言功能是Lambda Expressions和Modularity。 这两天的状态更新都已经发布。 我会与您分享链接&#xff0c;因此您可能会在假期中通读它们 Oracle计划在2013年中期发布Java SE 8。 Lambda项目 Lambda项目以及JSR-335希望提…

基于JBoss Fuse 6.2的JBoss BPM微服务集成指南

今年年初&#xff0c;我们宣布了JBoss BPM Suite令人兴奋的示例项目&#xff0c;该项目围绕一个正在运行的在线Travel Agency项目展开。 最初是利用Web服务&#xff0c;后来我们在JBoss Fuse的帮助下迁移到微服务 。 随着JBoss Fuse 6.2的发布&#xff0c;我们希望重新访问该…