电子商务网站调研上犹网站建设

diannao/2026/1/17 12:33:45/文章来源:
电子商务网站调研,上犹网站建设,宣传片拍摄清单,wordpress主题授权机制三年前#xff0c;我们宣布了该框架的第二个公开可用的主要版本。 CUBA 6是改变游戏规则的版本–许可从专有转为Apache 2.0。 那些日子#xff0c;我们甚至无法猜测从长远来看它将把框架带到哪里。 CUBA社区开始呈指数级增长#xff0c;因此我们了解了开发人员如何使用框架的… 三年前我们宣布了该框架的第二个公开可用的主要版本。 CUBA 6是改变游戏规则的版本–许可从专有转为Apache 2.0。 那些日子我们甚至无法猜测从长远来看它将把框架带到哪里。 CUBA社区开始呈指数级增长因此我们了解了开发人员如何使用框架的许多可能有时甚至是不可能的方法。 现在我们很高兴地宣布CUBA 7 我们希望这将使所有社区成员从刚开始CUBA和Java之旅的人到熟练的企业开发人员和Java专家的开发工作都更加连贯和欢乐。 开发工具 显然我们在很大程度上要归功于CUBA Studio 。 它显着简化了过度使用的Java企业例程在许多地方使它得以简化从而在可视化设计器中进行了琐碎的配置无需了解Persistence API或Gradle甚至Spring来开发完整的功能丰富的CRUD应用程序– Studio会做的它给你。 Studio是一个单独的Web应用程序这个事实造成了一些重大限制 首先Studio不是功能齐全的IDE因此开发人员必须在Studio和IntelliJ IDEA或Eclipse之间切换才能开发业务逻辑并从便利的导航代码完成和其他必要的事情中受益这很烦人。 其次这种神奇的简单性是建立在大量源代码解析和生成之上的。 改进代码生成功能将意味着朝着开发功能齐全的IDE的方向迈进。 我们决定依靠另一个巨人的肩膀来克服这些限制。 Studio由JetBrains合并到IntelliJ IDEA中。 现在您可以将其作为IntelliJ IDEA的插件安装也可以作为单独的独立捆绑包下载。 这开辟了新的视野 其他JVM语言支持首先是Kotlin 改进的热部署 整个项目的直观导航 更智能的提示和代码生成器 目前新Studio正在积极开发中我们正在移植旧版本中的功能。 短期计划还计划使用本机IntelliJ UI重新实现基于Web的设计师并改善项目导航体验。 堆栈升级 传统上基础堆栈也已进行了重大升级例如Java 8/11Vaadin 8Spring 5。 默认情况下新项目使用Java 8但是您可以通过在build.gradle文件中添加以下子句来指定Java版本 subprojects {sourceCompatibility JavaVersion.VERSION_11targetCompatibility JavaVersion.VERSION_11 } 由于Vaadin数据绑定API的重大更改升级到Vaadin 8是一个巨大的挑战。 幸运的是CUBA通过将开发人员包装到其自己的API层中从Vaadin内部提取了开发人员。 CUBA团队在重新实现内部结构方面做得很出色保持了自己的API不变。 这意味着完全可以保存兼容性并且可以在将项目迁移到CUBA 7之后立即使用Vaadin 8而无需进行任何重构。 官方发行说明中提供了更新后的依赖项的完整列表。 新屏幕API 此部分也可以称为“第一个屏幕API”因为CUBA从未在Web客户端层中有任何正式声明的API。 它来自框架的历史以及在第一阶段做出的某些假设 以声明为中心的方法–可以以声明方式描述的所有内容都应在屏幕描述符中声明而不是在其控制器中进行编码 标准屏幕浏览器和编辑器提供了具体的通用功能无需修改它 自从第一千名成员加入我们的社区以来我们意识到“标准” CRUD屏幕的要求范围之广–远远超出了最初设计的功能集。 尽管如此很长一段时间以来即使没有API层我们也能够处理自定义行为的请求-这要归功于另一个第一步假设-开放继承。 有效地“开放继承”意味着您可以覆盖基础类的任何公共或受保护方法以根据需要调整其行为。 这听起来似乎可以治愈所有疾病但是实际上它甚至无法给您带来短期合同如果重写的方法将被重命名删除或在框架的未来版本中根本不使用怎么办 UiController(new-screen) // screen id public class NewScreen extends Screen { } 从上面的示例中我们可以看到屏幕标识符已在控制器类的上方明确定义。 换句话说屏幕ID和控制器类现在彼此唯一对应。 因此好消息是现在可以通过其控制器类以安全的方式直接处理屏幕 Inject private ScreenBuilders screenBuilders;Subscribe private void onBeforeClose(BeforeCloseEvent event) {screenBuilders.screen(this).withScreenClass(SomeConfirmationScreen.class).build().show(); } 屏幕描述符成为补充部分而不是必需的。 可以以编程方式创建布局也可以将其声明为XML屏幕描述符该描述符由控制器类上的UiDescriptor批注定义。 这使控制器和布局更易于阅读和理解–这种方法与Android开发中使用的方法非常相似。 之前还需要在web-screens.xml文件中注册屏幕描述符并为其分配标识符。 在CUBA 7中由于兼容性原因而保留了该文件但是以新的方式创建屏幕不需要进行此类注册。 屏幕生命周期 新的API引入了清晰明了的屏幕生命周期事件 在里面 初始化后 演出前 表演后 收盘前 收盘后 可以按以下方式订阅CUBA 7中所有与屏幕相关的事件 UiController(new-screen) public class NewScreen extends Screen {Subscribeprivate void onInit(InitEvent event) { }Subscribeprivate void onBeforeShow(BeforeShowEvent event) { }} 将新的API与旧的方法进行比较您可以看到我们没有覆盖钩子方法钩子方法在父类的层次结构中被模糊地调用但是在屏幕生命周期的明确预定义点中定义了逻辑。 事件处理和功能代表 在上一节中我们学习了如何订阅生命周期事件那么其他组件呢 我们是否应该像在6.x版本中那样将所有必需的侦听器分散在屏幕初始化上 新的API非常统一因此订阅其他事件与生命周期绝对相似。 让我们以具有两个UI元素的简单示例为例一个按钮和一个Currency字段因此其XML描述符如下所示 ?xml version1.0 encodingUTF-8 standaloneno? window xmlnshttp://schemas.haulmont.com/cuba/screen/window.xsdcaptionmsg://captionmessagesPackcom.company.demo.weblayouthbox spacingtruecurrencyField idcurrencyField currency$currencyLabelPositionLEFT/button idcalcPriceBtn captionCalculate Price//hbox/layout /window 通过单击按钮我们称为中间件服务返回一个数字该数字转到货币字段。 货币字段应根据价格值更改其样式。 UiController(demo_MyFirstScreen) UiDescriptor(my-first-screen.xml) public class MyFirstScreen extends Screen {Injectprivate PricingService pricingService;Injectprivate CurrencyFieldcurrencyField;Subscribe(calcPriceBtn)private void onCalcPriceBtnClick(Button.ClickEvent event) {currencyField.setValue(pricingService.calculatePrice());}Subscribe(currencyField)private void onPriceChange(HasValue.ValueChangeEventevent) {BigDecimal price pricingService.calculatePrice();currencyField.setStyleName(getStyleNameByPrice(price));}private String getStyleNameByPrice(BigDecimal price) {...}} 在上面的示例中我们可以看到两个事件处理程序一个事件处理程序在单击按钮时被调用另一个事件处理程序在currency字段更改其值时被执行-就这么简单。 现在让我们想象一下我们需要验证价格并检查其价格是否为正。 直接的方法是在屏幕初始化时添加验证器 UiController(demo_MyFirstScreen) UiDescriptor(my-first-screen.xml) public class MyFirstScreen extends Screen {Injectprivate CurrencyFieldBigDecimal currencyField;Subscribeprivate void onInit(InitEvent event) {currencyField.addValidator(value - {if (value.compareTo(BigDecimal.ZERO) 0)throw new ValidationException(Price should be greater than zero);});}} 在现实世界的应用程序中屏幕入口点通常会被此类屏幕元素初始化程序所丢弃。 为了解决此问题CUBA提供了有用的注释Install 。 让我们看看它对我们的案例有何帮助 UiController(demo_MyFirstScreen) UiDescriptor(my-first-screen.xml) public class MyFirstScreen extends Screen {Injectprivate CurrencyFieldBigDecimal currencyField;Install(to currencyField, subject validator)private void currencyFieldValidator(BigDecimal value) {if (value.compareTo(BigDecimal.ZERO) 0)throw new ValidationException(Price should be greater than zero);}} 实际上我们将验证逻辑从货币字段委派给屏幕中的currencyFieldValidator方法。 这可能看起来有些复杂但是开发人员以惊人的速度采用了此功能。 屏幕构建器/通知/对话框 CUBA 7还通过流畅的API引入了一组有用的组件 ScreenBuilders结合了流利的工厂来生成标准的查找编辑器和自定义屏幕。 以下示例显示了如何从另一个屏幕打开一个屏幕。 请注意 build方法返回正确类型的屏幕实例而无需不安全地强制转换它。 CurrencyConversions currencyConversions screenBuilders.screen(this).withScreenClass(CurrencyConversions.class).withLaunchMode(OpenMode.DIALOG).build(); currencyConversions.setBaseCurrency(Currency.EUR); currencyConversions.show(); 屏幕组件为创建和显示屏幕提供了较低层次的抽象而不是ScreenBuilders 。 如果需要进行遍历它还提供对CUBA应用程序中所有打开的屏幕 ScreensgetOpenedScreens 的信息的访问。 通知和对话框组件都引入了方便的自说明界面。 这是创建和显示对话框和通知的示例 dialogs.createOptionDialog().withCaption(My first dialog).withMessage(Would you like to thank CUBA team?) .withActions(new DialogAction(DialogAction.Type.YES).withHandler(e - notifications.create().withCaption(Thank you!).withDescription(We appreciate all community members).withPosition(Notifications.Position.MIDDLE_CENTER).withHideDelayMs(3000).show()),new DialogAction(DialogAction.Type.CANCEL) ).show();数据绑定 CUBA不仅可以通过提供具有广泛代码生成功能的高级可视化工具还可以通过即用型的丰富数据感知组件集来快速开发后台UI。 这些组件只需要知道它们使用什么数据其余的将自动进行管理例如查找列表选择器字段具有CRUD操作的各种网格等。 在版本7之前数据绑定是通过所谓的数据源实现的-数据对象包装单个实体或实体集合以将其与数据感知组件进行反应性绑定。 这种方法效果很好但是在实现方面却是一个整体。 整体架构通常会导致其自定义问题因此在CUBA 7中这种坚固的巨石被分为3个数据组件 数据加载器是数据容器的数据提供者。 数据加载器不保留数据它们只是将所有必需的查询参数传递到数据存储区并使用结果数据集提供数据容器。 数据容器保留加载的数据单个实体或多个实体并以反应方式将其提供给数据感知组件包装实体的所有更改都暴露给相应的UI组件反之亦然 UI组件将导致其数据容器中的相应更改。 数据上下文是功能强大的数据修改管理器可跟踪更改并提交所有修改的实体。 实体可以合并到数据上下文中因此它将提供原始实体的副本但唯一但非常重要的区别是将跟踪存储和修改对所得实体及其引用的所有实体包括集合的所有修改作出相应的承诺。 数据组件可以在屏幕描述符中声明也可以使用专门的工厂DataComponents以编程方式实例化。 杂 介绍了Ufff它是新屏幕API的最重要部分因此让我简要列出Web客户端层中的其他重要功能 URL历史记录和导航 。 此功能通过Web浏览器中的“返回”按钮解决了SPA的一个非常普遍的问题提供了一种将路由分配给应用程序屏幕的简便方法并使API能够在其URL中反映屏幕的当前状态。 窗体而不是FieldGroup。 FieldGroup是一个数据感知组件用于显示和修改单个实体的字段。 它推断运行时为字段显示的实际UI。 换句话说如果您的实体中有一个Date字段它将显示为DateField 。 但是如果您希望通过编程方式对此字段进行操作则需要将该字段注入到屏幕控制器然后手动将其强制转换为正确的类型在我们的示例中为DateField 。 稍后我们将字段类型更改为其他类型并且应用程序在运行时崩溃…Form通过显式字段类型声明解决了此问题。 在此处找到有关此新组件的更多信息。 第三方 JavaScript组件的集成已大大简化请按照文档将自定义JavaScript组件嵌入到CUBA应用程序中。 现在可以从xml屏幕描述符中轻松定义HTML / CSS属性也可以通过编程方式对其进行设置。 在此处查找更多信息。 中间件功能 之前有关新屏幕API的内容超出了我的预期因此在本节中我将力求简洁 实体变更事件 Entity Changed Event是一个Spring应用程序事件当您的实体进入数据存储被物理插入并距离提交一英寸以内时将触发该事件。 在这里您可以提供一些附加检查例如在确认订单之前检查库存中的产品可用性并在其他交易将其可见之前当然已读取提交的隔离级别对其进行修改例如重新计算总计。 您还可以使用此事件作为通过抛出异常来中断提交事务的最后机会–在某些特殊情况下可能很有用。 还有一种在提交发生后立即捕获Entity Changed Event的方法。 请遵循文档的本章以查看示例。 交易数据管理器 在开发应用程序时我们通常使用分离的实体即不受任何事务管理的实体进行操作。 但是并非总是可以使用分离的实体尤其是在尝试满足ACID要求时-可以使用事务数据管理器时就是这种情况。 它看起来与普通的数据管理器非常相似但在以下方面有所不同 它可以加入现有事务如果在事务上下文中被调用或创建自己的事务。 它没有提交方法但是有保存方法它不会导致立即提交但是要等到附加的事务被提交后再进行。 在此处找到使用它的示例。 JPA生命周期回调 最后CUBA 7支持JPA生命周期回调。 为了不复制有关这些回调的用途的写得很好的信息让我分享一下此链接 该链接完全涵盖了该主题。 兼容性呢 对于任何主要发行版这都是一个公平的问题尤其是当有太多看似重大的更改时 我们在设计所有这些新功能和API时都考虑了向后兼容性 CUBA 7支持旧的屏幕API并通过幕后的新屏幕API实现) 我们还提供了用于旧数据绑定的适配器这些适配器可继续用于旧屏幕。 因此好消息是从版本6到版本7的迁移路径应该非常简单。 结论 在结束本技术概述时我想提到还有其他重要的创新尤其是在许可方面 Studio的10个实体限制现已消失 现在免费提供报告BPM图表和地图以及全文搜索插件。 Studio的商业版本为实体屏幕菜单和其他平台元素的视觉设计师带来了额外的开发舒适度而免费版本则专注于使用代码 请注意对于6.x和更早版本的Platform和Studio许可条款保持不变 最后让我再次感谢社区成员的所有支持和反馈。 希望您会喜欢版本7 更改的完整列表通常在发行说明中提供 。 翻译自: https://www.javacodegeeks.com/2019/04/whats-new-cuba-7.html

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

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

相关文章

网站建设首选易网宣建设网站的模板

编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 ‘.’ 表示。 Note: 给定的数独序…

厦门微信网站建wordpress更换主题帖子封面不显示

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

百度竞价关键词价格查询工具seo多久可以学会

河流分级法的分级方法是从源头最小河流开始,称为一级河流;两条一级河流汇合成二级河流;以此类推,三级河流等等;最后是干流。本文将介绍中国三级及以上河流数据。 数据简介 1:100万中国三级及以上河流矢量数据是涵盖了全国范围内三级及以上级别河流的详细地理信息和空间分布。这…

尧都区建设厅官方网站互联网保险发展现状分析

创建自动化云端流,流的触发器选择第一个提交新回复时 点击蓝色的Change connection,登录创建Microsoft Forms表单的账号 选择提前创建的表单;如果想连接其他账号创建的Microsoft Forms表单,可以再次点击蓝色的Change connection&a…

高端医疗网站模板免费下载用人名做网站域名

在软件测试行业,CNAS认可和CNAS软件测试公司是不可忽视的关键词。CNAS认可是指中国合格评定国家认可委员会对特定领域组织、机构或公司的能力和资质进行的认可过程。该认可遵循国际标准及相关法律法规,是评定组织或实验室技术能力和专业水平的权威认可&a…

电子商务网站开发需要注意问题上海app开发定制公司

简介: LSM-Tree 是很多 NoSQL 数据库引擎的底层实现,例如 LevelDB,Hbase 等。本文基于《数据密集型应用系统设计》中对 LSM-Tree 数据库的设计思路,结合代码实现完整地阐述了一个迷你数据库,核心代码 500 行左右&#…

湘潭网站制作公司专门做捷径网站

C# 8 is old news. Onward, to C# 9! (C# 8 已成旧闻, 向前, 抵达 C# 9!)Did you know that planning is already underway for the ninth version of the C# language?第九版 C# 语言已经在开发中了, 你晓得伐?Now, to be fair, this has been in the planning phases long,…

哪家企业网站建设好网页设计教程新加坡校友会

检测内容: 五金轴尺寸机器视觉测量 检测要求: 精度0.015mm,速度180~240个/分钟 视觉可行性分析: 对样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉系统进行测试测量。 结果: 对…

合肥专业做网站的公司一个人做电商网站难吗

PaddleOCR.Onnx一款基于Paddle的OCR,项目使用ONNX模型,速度更快。本项目同时支持X64和X86的CPU上使用。本项目是一个基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,同…

河南省城乡和住房建设厅网站网站建设优点

有的时候我们在Windows7的环境下使用Wireshark的时候,比如点击【Interface List】的时候,出现错误。 错误内容如下: There are no interfaces on which a capture can be done. 这个错误是因为系统没有启动NPF服务造成的。 解决的办法很简单&…

linux系统怎么做网站如何做自己的网站后台

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 实例: redis 127…

做网站活动成都网站制作关键词推广排名

Linux swapoff命令Linux swapoff命令用于关闭系统交换区(swap area)。swapoff实际上为swapon的符号连接,可用来关闭系统的交换区。语法swapoff [设备]参数:-a 将/etc/fstab文件中所有设置为swap的设备关闭-h 帮助信息-V 版本信息实例显示分区信息:# sfdi…

广州网站建设方案案例个人可以做商城网站

2023年上半年,ChatGPT引起了广泛的热议,对于ChatGPT有多热,不需要我重复了,你可能在网上看到了很多报道,标题如《ChatGPT揭开AI战幔:杀死黄页一样摧毁Google?》和《ChatGPT强势来袭,…

兴科cms网站建设系统app下载安装注册

勾选填充零后的效果,就是不够的位数用零来补齐!

网站空间 php程序微网站模板怎么用

MySQL卸载步骤如下: (1)按 winr 快捷键,在弹出的窗口输入 services.msc,打开服务列表。 (2)在服务列表中, 找到 mysql 开头的所有服务, 右键停止,终止对应的…

免费建站平台官网福州做网站价格

Application Fundamentals 署名:译言biAji 链接:http://developer.android.com/guide/topics/fundamentals.html 应用程序基础(Application Fundamentals) Android应用程序使用Java做为开发语言。aapt工具把编译后的Java代码连同其它应用程序需要的数据…

专业旅游网站开发系统网站子域名查询

1、打开开发的基本配置,成为开发者 2、启用开发者密码 3、看一下自己的公众号id 4、记录自己的AppID、AppSecret

深圳建网站兴田德润实惠西安网站设计建设公司 交通

转载自 干货:排名前 16 的 Java 工具类!在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目…

四川建设工程网上合同备案网站国外wordpress cms主题

在当今的软件开发领域中,高性能和并发性是很重要的。开发人员需要编写能够有效利用多核处理器的程序,以提高应用程序的性能和响应能力。Go语言(Golang)就是一种在这方面非常强大的编程语言,它提供了一种称为协程&#…

长春吉林建设信息网站现在网站开发用什么环境

AI驱动的市场调研革命:从数据采集到竞品策略生成的闭环实践指南 引言:智能时代的高效市场洞察 Forrester研究显示,使用AI辅助市场调研可使数据采集效率提升8倍,策略生成速度加快4倍。本文以GitHub Sentinel、LanguageMentor为案例,揭示如何构建AI增强型市场分析体系,实现…