Vaadin附加组件和Maven

介绍

我喜欢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 Web服务器,现在只需将这些源复制到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

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

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

相关文章

八皇后时间复杂度_【算法打卡】N皇后

难度&#xff1a;困难题目&#xff1a;n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n&#xff0c;返回 n 皇后不同的解决方案的数量。提示&#xff1a;皇后&#xff0c;是国际…

Android-Binder 简析

前言 对于Android来说&#xff0c;Binder的重要性怎么说都不为过。不管是我们的四大组件Activity、Service、BroadcastReceiver、ContentProvider&#xff0c;还是经常在应用中使用到的各种ServiceManager&#xff0c;其背后都是Binder在支撑。然而Binder机制又不是三言两语能够…

tplink 703刷固件

1.软件下载: ImageBuilder链接 如果是全新刷机的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 如果是系统升级的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/op…

编程反模式

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

sql 插入text字段包含特殊字符_Kettle(PDI)转换中输出之插入/更新详解

概述Insert / update(插入 / 更新)此步骤首先使用一个或多个查询关键字查找表中的一行。如果找不到该行&#xff0c;则插入该行。如果可以找到它&#xff0c;并且要更新的字段相同&#xff0c;则不执行任何操作。如果它们不完全相同&#xff0c;则更新表中的行。注意&#xff1…

一张图让你看清Java集合类(Java集合类的总结)

如今关于Java集合类的文章非常多&#xff0c;可是我近期看到一个非常有意思图片&#xff0c;基本上把Java集合的整体框架都给展现出来了。非常直观。 假设发现图片看不清楚。点此处看大图 在这里&#xff0c;集合类分为了Map和Collection两个大的类别。 处于图片左上角的那一块…

【P1835】小红花

很简单的题&#xff0c;然而我没想到&#xff0c;在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题&#xff1a; Fj在圣诞节来临之际&#xff0c;决定给他的奶牛发一些小红花。现在Fj一共有N头奶牛&#xff0c;这N头牛按照编号1..N&#xff0c;排成…

Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)

Cocos2d-x 3.2 Lua演示样例FontTest&#xff08;字体測试&#xff09;本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例&#xff0c;主要使用了字体文件来创建我们想要的字体样式&#xff1a;第一个參数为文本。第二參数为ttf字体文件&#xff0c;第三个參数为字体大小…

linux上安装memcached步骤

libevent: http://libevent.org/ 服务器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客户端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二选一 http://chenzhou123520.iteye.com/blog/1…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我将解释将Coherence与EclipseLink和GlassFish一起使用的策略第一。这描述了配置Coherence的JPA支持的Cache所必须采取的步骤&#xff0c;以及如何在GlassFish中使用它。高性能数据存储。 一般的做法 您可以将Coherence API与通过JPA映…

arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

背景介绍在日益信息化的社会中&#xff0c;各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落。嵌入式系统的功能越来越复杂&#xff0c;这就使得一个嵌入式系统产品从市场需求立项到方案选择、样机研制、定型量产所需要的开发费用越来越多&#xff0c;所需开发时间越来…

反素数 -- 数学

反素数就是区间内约数个数最多的那个数。 在ACM题目里&#xff0c; 一般是求约数最多而且数字最小的那个数&#xff0c;【1--n】 二是求约数刚好等于n的最小的那个数 三是求区间里的最小反素数【beign&#xff0c;end】 1和3有区别吗&#xff1f;有&#xff0c;1可以加速&#…

上传文件---未能找到路径“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上传文件&#xff0c;简单实例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

关于string转整数

又是leetcode的easy级别题&#xff0c;很基本的题目&#xff0c;却漏考虑很多情况&#xff0c;动手前一定要考虑清楚呀&#xff01;&#xff01;&#xff01; 就当做锻炼写作能力吧&#xff0c;先上题目&#xff01; 将文本转换成整数&#xff0c;注意一下几点&#xff1a; 1.文…

数字三角形——递归、递推、记忆化搜索

数字三角形 描述: 有一个由非负整数组成的三角形&#xff0c;第一行只有一个数&#xff0c;除了最下行之外每个数的左下方和右下方各有一个数。 问题&#xff1a; 从第一行的数开始&#xff0c;每次可以往左下或右下走一格&#xff0c;直到走到最下行…

水晶报表分组分栏_web报表可视化设计器工具推荐

古往今来&#xff0c;信息就是决胜的关键。在科技时代的今天亦是如此。企业的数据管理在帮助企业加强管控、提高竞争力等方面具有不可或缺的作用。这就不得不说到报表工具。企业想要将储存于各种商业信息系统中的数据转化成有用的信息&#xff0c;最终帮助决策者做出更快、更好…

Twisted

Twisted定义Twisted是一个基于事件驱动的网络引擎框架网络框架&#xff0c;别人预先定义好的一个框架&#xff08;一个项目&#xff09;&#xff0c;如.net某个web框架有25个class&#xff0c;从BeginRequest依次执行类里的process方法&#xff0c;程序员自己定义一个类&#x…

Centos 6.5 搭建php环境(nginx+mariadb+php7)

1.mariaDb vim /etc/yum.repos.d/MariaDB.repo [mariadb] name MariaDB baseurl http://yum.mariadb.org/5.5/centos5-x86 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1#如果服务器已经安装了MariaDB-Galera-server包&#xff0c;你可能需要在安装MariaDB-s…

读取nas_NAS怎么玩?除了存放小姐姐,它竟然还有这些功能

自从有了电脑&#xff0c;就一直在折腾"存储那点事儿"&#xff0c;说到底&#xff0c;电脑的本质就是存储&#xff0c;而自己弄家用存储方面的东西算下来也有几年了。单机的硬盘存储比较简单&#xff0c;但是随着家里各种设备的增多&#xff0c;各个设备间的文件共享…

OC第一讲:类和对象

今天终于开始进行OC的学习了 一.首先讲了NSLog NSLog是oc里面的输出语句&#xff0c;其用法和printf差不多&#xff0c;但是还是有差别的 1&#xff0c;NSLog是自动换行的&#xff0c;不用像printf那样还需要加\n&#xff1b; 2&#xff0c;NSLog在引号面前需要添加符号&#x…