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,一经查实,立即删除!

相关文章

【算法图解|3】JavaScript 如何实现数组去重

数组去重方法老生常谈&#xff0c;既然是常谈&#xff0c;我也来谈谈。 也许我们首先想到的是使用 indexOf 来循环判断一遍&#xff0c;但在这个方法之前&#xff0c;让我们先看看最原始的方法&#xff1a; var array [1, 1, 1, 1];function unique(array) {// res用来存储结…

angular 数字逗号分隔_angular 实现的输入框数字千分位及保留几位小数点功能示例...

摘要&#xff1a;这篇AngularJS栏目下的“angular 实现的输入框数字千分位及保留几位小数点功能示例”&#xff0c;介绍的技术点是“angular、保留几位小数、千分位、小数点、输入框、示例”&#xff0c;希望对大家开发技术学习和问题解决有帮助。本文实例讲述了angular 实现的…

单页应用程序的Spring Boot静态Web资源处理

诸如gulp和grunt之类的Javascript构建工具确实让我大吃一惊&#xff0c;我看着这些工具的构建脚本之一&#xff0c;发现很难理解它&#xff0c;无法想象从头开始编写其中一个构建脚本。 这就是yeoman出现的地方&#xff0c;它是一种非常方便的工具&#xff0c;它可以使用无数种…

Beta版本冲刺第二天

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

华字后面配什么字比较好_女孩叫华什么名字好听 华字和什么字搭配取名最好...

女孩叫华什么名字好听华鹭 华朦 华芮 华云 华徘 华葛 华馥华苹 华闵 华松 华娴 华红 华幽 华枫华双 华娉 华媚 华蝴 华胭 华瑷 华瑶华任 华智 华妮 华菀 华嫙 华笙 华楚华寐 华萱 华葵 华岱 华勤 华湘 华宜华咏 华欣 华娓 华穎 华兰 华汐 …

【算法图解|4】JavaScript 如何求数组的最大值和最小值

取出数组中的最大值或者最小值是开发中常见的需求 最原始的方法&#xff0c;莫过于循环遍历一遍&#xff1a; var arr [6, 4, 1, 8, 2, 11, 23];var result arr[0]; for (var i 1; i < arr.length; i) {result Math.max(result, arr[i]); } console.log(result); 通过…

elf 取路径_c – 获取主要可执行文件的ELF标题

由dlopen(0,RTLD_LAZY)返回的void *指针给出一个对应于主可执行文件的struct link_map *.调用dl_iterate_phdr也会在首次执行回调时返回主可执行文件的条目.你可能会被链接映射中的.l_addr 0这个事实所困惑,而使用dl_iterate_phdr的那个dlpi_addr 0.这正在发生,因为l_addr(和…

【算法图解|5】javaScript求两个数的最大公约数

思路&#xff1a;采用辗转相除的方法&#xff0c;用大的数去除以小的那个数&#xff0c;然后再用小的数去除以的得到的余数&#xff0c;一直这样递归下去&#xff0c; 直到余数为0时&#xff0c;最后的被除数就是两个数的最大公约数。 function getMaxCommonDivisor(a, b) {if …

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

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

JavaScript 如何求两个数的最小公倍数

1 .用辗转相除法求最大公约数 算法描述: m对n求余传给自己&#xff0c;再次求余, 若余数等于0 则 n 为最大公约数 2.最小公倍数 两个数的积 / 最大公约数 基本思想是采用将两个数相乘&#xff0c;然后除以它们的最大公约数 function getMinCommonMultiple(a, b){return a * b …

数据挖掘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;这些版本是可以继续进行…

java文件读写操作类

借鉴了项目以前的文件写入功能&#xff0c;实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可&#xff08;可以是绝对或相对路径&#xff09; 以后使用时&#xff0c;可以在此基础上改进&#xff0c;比如&#xff1a; 写操作&#xff1a; 1&#xff0c;对java GUI中文…

java递归基础掉用_Java递归基础

java递归基础掉用对于那些不知道递归是什么的人&#xff08;并且像个大笑者一样&#xff09;&#xff0c;请单击以下链接&#xff1a;Google搜索&#xff1a;递归&#xff0c;然后单击“您的意思是……”项。 希望您终于弄清楚了递归是指其自身的任何内容&#xff08;如果不是&…

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

前言:圣诞节虽然不是中国的传统节日,但当下很多时髦的年轻人却很喜欢过这个欢乐的节日,并乐于打造参与属于这个节日的仪式感。 除了所知的圣诞老人、圣诞树、互送礼物、吃大餐等传统习俗外,其实程序员能为今天的节日增加一些特别的环节。 圣诞树下载: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;报修日期和时间、用户报修次数。…

Java SE 8新功能介绍:使用Streams API处理集合

使用Java SE 8 Streams的代码更干净&#xff0c;易读且功能强大..... 在“ Java SE 8新功能介绍”系列的这篇文章中&#xff0c;我们将深入解释和探索代码&#xff0c;以了解如何使用流遍历集合&#xff0c;从集合和数组创建流&#xff0c;聚合流值。 在上一篇文章“ Lambda的…

在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…