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 的相关文章

随机推荐

  • 如何使用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 开发经验的人的推荐 我有两个