Vaadin 与 Bootstrap

2024-04-14

我计划制作一个应用程序,该应用程序在客户端具有复杂表单和逻辑验证的视图。我计划使用 AJAX 进行提交并具有一些视觉吸引力。

我想要那些具有 Bootstrap 和/或 CoffeeScript 和 Vaadin 开发经验的人的推荐。我有两个选择:

  • 使用 Bootstrap / CoffeeScript 和一些服务器站点框架,例如 Play Framework、Rails 或 Django
  • Vaadin

我关心的标准与客户端 JavaScript 和/或 HTML5 验证以及使用 Bootstrap 编写的 CSS 和 HTML 代码中可能出现的复杂性有关。在 ria 应用程序中是否值得使用 CoffeeScript 而不是 Vaadin?我看到有很多人选择了 Bootstrap,我相信他们有他们的理由。

帮助我做决定。一些相关文档也可能有帮助。


Vaadin

Vaadin 是一个非常好的工具,用于构建用纯 Java 开发并通过常规 Web 浏览器交付的交互式桌面式 Web 应用程序。

Benefits

Vaadin http://www.vaadin.com/6、7 和 8 应用程序完全在服务器端运行。 Vaadin 自动将 JavaScript 库安装到用户的浏览器窗口中:

  • 在屏幕上绘制服务器端应用程序指示的任何内容。
  • 将用户操作(单击、键入等)反馈到服务器以供应用程序考虑和响应。

因此,不存在“客户端逻辑验证”或“html5 验证”,至少从 Vaadin 应用程序开发人员的角度来看是这样。 Vaadin 框架可能会在其内部实现中秘密执行此操作,但这不是我作为 Vaadin 应用程序开发人员所关心的。这是 Vaadin 的核心优势:我不关心 Vaadin 如何将我的表单显示到用户的屏幕上。作为 Vaadin 应用程序开发人员,我不会编写任何 JavaScript、HTML、DOM、CSS 或 AJAX。只是纯Java。

风格类似于Swing http://en.wikipedia.org/wiki/Swing_%28Java%29: 实例化一个layout https://vaadin.com/book/-/page/layout.html(一个表格),添加labels https://vaadin.com/book/-/page/components.label.html, add buttons https://vaadin.com/book/-/page/components.button.html, add fields https://vaadin.com/book/-/page/components.textfield.html, add 其他小部件 https://vaadin.com/demo。附验证者 https://vaadin.com/book/-/page/components.form.html#components.form.validation如所须。嵌套额外的布局,以适应复杂的形式。所有这些都在服务器端的内存中执行,全部用纯 Java 编写。最后让布局显示出来。噗,就像魔术一样,瓦丁告诉浏览器显示该形式的相似之处。

如果您想开发通过 Web 浏览器部署的桌面式商务应用程序,Vaadin 是一个很棒的工具。

权衡

权衡包括:

  • 服务器端大量内存和 CPU 使用率。
  • 放弃对 HTML/CSS/JavaScript 的控制。

Scaling

您的网络应用程序位于服务器上,而不是客户端上。所有的业务逻辑、用户输入的数据、所有用户表单的内部表示(例如表中的行项目),所有这些都位于服务器上。将其乘以用户数量。这意味着 Vaadin 应用程序可能需要大量内存和 CPU 使用量。

这可能会限制扩大规模。但考虑到 64 位 Java、多 GB 内存和多个内核,即使是最低级的机器(例如麦克迷你, http://www.apple.com/macmini/server/扩展可能只是最大/最繁忙的应用程序的问题。

即使在那些罕见的大型/繁忙应用程序中,也可能有方法来处理 Vaadin 中的扩展。所有应用程序都位于 Servlet 会话中。某些 Web 基础设施允许此类会话状态在服务器之间移动,甚至保存到存储中以供其他服务器获取。

或者您的应用程序可以很好地扩展。已完成 11,000 个并发客户端的模拟。看:

  • Vaadin 可扩展性研究 - QuickTickets https://vaadin.com/blog/-/blogs/vaadin-scalability-study-quicktickets(公司博客文章)
  • 使用 Vaadin 和 WildFly 进行扩展网络研讨会 https://youtu.be/kCOd9l4WGNY与 Arun Gupta(视频演示,YouTube)

控制 HTML、CSS、JavaScript

如果您的团队对传统的 Web 应用程序架构更熟悉或更有经验,那么 Vaadin 可能不适合您。在 Vaadin 中,您完全用纯 Java 编写应用程序,Vaadin 会自动将其转换为 HTML、CSS 和 JavaScript。

你可以稍微调整一下CSS。即使不接触 CSS,Vaadin 的“主题”(Valo https://vaadin.com/valo, Reindeer http://demo.vaadin.com/ReindeerTheme)如果您希望覆盖默认值,您可以对颜色、大小和字体进行更多控制。但要知道,Vaadin 在生成 HTML 和 CSS 方面处于“主导地位”;你只是被允许进行一点“后座驾驶”的乘客。

如果您的目标不是开发桌面式应用程序,如果您want要完全控制 HTML/CSS,那么 Vaadin 可能不适合您。


Updates

Vaadin 8 发布

2017 年 2 月 22 日,Vaadin 8 发布 http://www.prnewswire.com/news-releases/vaadin-releases-vaadin-framework-8-300412081.html。最大的增强是利用现代 Java 功能(例如带有类型参数和 lambda 表达式的泛型)重写数据模型和数据绑定 API。此外,内存和 CPU 的效率更高。

Vaadin 7 发布。

虽然架构与 Vaadin 6 基本相同,但 Vaadin 7 比以往任何时候都更好。看:什么是新的 https://vaadin.com/vaadin7.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vaadin 与 Bootstrap 的相关文章

  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接

随机推荐

  • 如何使用jQuery更新数据库而不刷新页面?

    我该如何发送这个display false 使用 jQuery 向服务器发送函数 以便在不刷新页面的情况下更新数据库 def display false if display false main id self request get m
  • 无法在 Mavericks/Yosemite 中签署 kext?

    目标 签署我自己的软件包和我自己的内核扩展 上下文中的 我自己的 意味着 我编写的 或者我在其他地方选择的 从它们的源代码中重新编译的 并且想要安装在我的机器上 问题 小牛队不接受我的签名Code Signing Failure code
  • Google 电子表格作为网络应用程序的数据库

    有谁知道我是否可以使用 Google 电子表格来存储自定义 HTML 表单的结果 我知道 Google 电子表格允许在 Google 域本身上创建表单 但是是否可以使用 Google 电子表格作为其他网络应用程序的数据库 谷歌电子表格 AP
  • 左移 255 位(作为一个字节)

    谁能解释为什么以下内容无法编译 byte b 255 lt lt 1 错误 常量值 510 无法转换为 字节 我期待二进制的以下内容 1111 1110 类型转换难倒了我 C 中的数字文字是int not byte 编译器将评估位移位 因此
  • 无法解决 SonarQube 错误“使该行从第 3 列开始”

    我在 xml 中有很多行都存在此错误 布局 字符串 可绘制对象 我尝试将每列的空间更改为 3 在出现此错误的行中放置 3 个选项卡 但在 SonarQube 中仍然出现此错误 我该如何解决这个问题 我在这里举了一个我收到此错误的示例
  • 令人困惑的类型错误

    我有一个小型 Python 程序 它应该通过运行适当的方法来对按下向上按钮做出反应 但它没有这样做 而是给了我一个令人困惑的错误 from tkinter import class App def init self master self
  • 检查 Objective-C 中的日期格式

    我收到一个包含日期的字符串 我想检查它是否具有 dd MM yyyy 格式 现在我正在使用在同一页面中找到的代码 NSDate date dateFormatter dateFromString dateString if date nil
  • 为什么 JavaScript 函数调用要用括号括起来? [复制]

    这个问题在这里已经有答案了 这两个 javascript 函数调用有什么区别 function alert foo 与此相比 function alert foo 这样做是为了可读性 您给出的两个示例之间没有真正的功能差异 但它们都非常接近
  • 在react-native中,任务因请求而被孤立——这是什么意思?

    我正在尝试为带有按钮和其他操作的图块构建一个网格系统 我分叉尝试使用 React Native Playground 网格图像源 你可以找到here https rnplay org apps sXriww 添加时会产生以下 堆栈跟踪 和错
  • 在 VARCHAR 字段中使用 MAX()

    我有一个包含以下数据集的表 ID VARCHAR2 field D001 D002 D010 D0012 I use max 在这个领域里 Select max ID from
  • 宏观评估顺序[重复]

    这个问题在这里已经有答案了 可能的重复 宏中的 和 https stackoverflow com questions 4364971 and in macros 为什么第二个 printf 的输出是 f 1 2 宏的计算顺序是什么 inc
  • 下载外部pdf文件到chrome打包应用程序的文件系统

    有没有办法将pdf文件从服务器保存到chrome打包的应用程序 在我的 chrome 打包应用程序中 我有这样的东西 Download 当用户单击此超链接时 我应该能够将该 pdf 文件下载到我的 chrome 打包应用程序文件系统中 下载
  • SQL Server WHERE 条件不考虑空格

    我的名字和姓氏后面带有空格 我有两个 SQL 查询 即使我搜索时没有空格 第一个查询也会返回结果 第一个查询返回不需要的结果 此行为在所有版本的 SQL Server 中是否一致 这是一种已知的行为吗 它是否记录在msdn for SQL
  • char * 变量地址与 char[] 变量地址

    我从以下两个声明和初始化中打印出地址和字符串 char strPtr char This is a string made on the fly char charArray Chars in a char array variable 打
  • 我什么时候应该关闭数据库连接?

    PHP脚本中是否必须关闭连接 根据数据库服务器的配置 同时打开的连接数可能受到限制 所以 如果你的脚本 做一些查询 然后 进行一些长时间的计算 而不再进行任何查询 在完成所有查询后关闭连接并仅在需要时才打开连接可能会很有趣 不过 请注意 无
  • JavaScript 图像 onload 事件绑定

    我有这段代码循环遍历数组并加载图像并在加载图像时发出通知 for var i 0 i lt arr length i var imageObj new Image imageObj src url i imageObj onload fun
  • 如何从 mysqldump 恢复特定表

    我有一个使用以下命令获取的 mysqldump 文件 mysqldump u root password
  • PHPExcel 日期格式

    我从 MS SQL 服务器获取 2012 08 09 00 00 00 不带引号 格式的输出 但是 当我将其写入 Excel 文件时 我无法以日期格式写入它以在 Excel 上进行 dd mmm yyyy 格式 因此 我尝试以 date 2
  • 希腊字符串的长度大于应有的长度

    我正在编写一个程序 我将一串希腊字符作为输入 当我打印它的 len 时 它输出它的双精度 例如 如果 ch 希腊字符 或 ch printf d strlen ch 输出 4 而不是 2 如果 ch ab 则输出 2 这是怎么回事 您可以使
  • Vaadin 与 Bootstrap

    我计划制作一个应用程序 该应用程序在客户端具有复杂表单和逻辑验证的视图 我计划使用 AJAX 进行提交并具有一些视觉吸引力 我想要那些具有 Bootstrap 和 或 CoffeeScript 和 Vaadin 开发经验的人的推荐 我有两个