openxava
博客

2023年5月15号

OpenXava 7.1 已发布

在这 OpenXava 的新版本里包含了许多令人兴奋的更新,我们终于有时间新增大家长期以来一直要求的功能,例如列表模式中的日历、@Mask 注解、可编辑值的组合 ,一个用于清除引用的按钮,等等。

此外,我们付出了巨大的努力来增强应用程序的网络安全性。因此,如果您的应用程序可以在网络上被大众和各种黑客访问,那么它们现在将更加安全。

要更新至此版本,请在项目中的 pom.xml 文件中更改 openxava.version 属性的值,如下:

<properties>
    <openxava.version>7.1</openxava.version>
    ...
</properties>

然后重编译您的项目:

  • 在 OpenXava Studio 中:
    • 在项目中点击鼠标右键 > Run As > Maven clean
    • 在项目中点击鼠标右键 > Run As > Maven install
  • 或使用命令行: mvn clean package

请查看迁移指南

列表模式中的日历

第一版本的日历是神奇且自动的,不需要您作为程序员做任何事情。只需该模块的实体中有一个日期属性,就会在列表模式下出现一个新图标,允许您选择日历格式:



日历的外观如下:



您可以通过用鼠标单击某一天来创建新记录,也可以通过单击它们来编辑现有记录。

网络安全增强

我们对 OpenXava 生成的 Web 界面进行了多项更改,使其更加安全且更难破解。以下是我们已修复的问题列表:

  • 修复拒绝服务的漏洞。
  • 修复了HTML 元素中事件的内联 JavaScript。
  • 修复 XSLT 注入的漏洞。
  • 修复了缺少 X-Content-Type-Options 开头。
  • 修复了没有 SameSite 属性的 Cookie。
  • 修复应用程序错误的泄露。
  • 修复了URL 重写中的会话 ID。
  • 修复跨站点脚本 (XSS) 的漏洞。
  • 修复在 .htaccess 中对某些 URL 进行数据过滤。
  • 修复未设置内容安全策略 (CSP) 开头。
如果您的应用程序是公开的或在安全性很重要的环境中运行,我们建议更新到版本 7.1。

@Mask 注解

您现在可以使用 @Mask 注解对任何属性指示数据输入掩码。掩码是对一个字符串定义有效的格式。您可以使用以下一些验证器

  • 'L': 用户必须输入从 A 到 z 的字母。
  • '0': 用户必须输入一个数字。
  • 'A': 用户必须输入字母或数字。
  • '#': 用户必须输入数字、空格、“+” 或 “-”。
您还可以添加特殊字符、静态空格,甚至组合验证器。例如:
@Mask("L-000000")
private String passport;

@Mask("0000 0000 0000 0000")
private String creditCard;

@Mask("LL 000 AA")
private String carPlate;

@Mask("0.000/0-000")
private String customMask;

清除引用的按钮

最后,用户界面中现在有一个按钮来清除引用的值:


同样也用于@DescriptionsList:

具有可编辑值的组合

我们有一个名为 EditableValidValues 的新编辑器,您可以将其分配给 String 属性。如下:

@Editor("EditableValidValues")
@Column(length = 15)
private String color;
如果我们之后以编程方式添加值,使其成为动态组合,如下:
getView().addValidValue("color", "wht", "White");
getView().addValidValue("color", "blk", "Black");
由于除了具有预定义值的组合外,它还使用 EditableValidValues,因此该字段可编辑。在此示例中,通过选择“白色”,您可以将其编辑为“白色米色”或输入一个新值,例如“黄色”。这些新值将不会添加到用于其他记录的原始选项列表中:

新的富文本编辑器

我们目前使用的 JS 库 CKEditor 4 并不支持 Content Security Policy,这意味着它不能在安全环境中使用。但也因为许可的问题,我们无法更新到 CKEditor 5,所以我们不得不选用 TinyCME。更新的结果不仅是更安全的库,还是一个更现代的富文本编辑器:

所升级的库

我们升级了以下第三方库:

  • 出于安全原因,上传编辑器使用的 FilePond JavaScript 库已升级到 4.30.4。
  • 用于地图的 Leaflet JavaScript 库已升级到 1.9.3。
  • HtmlUnit 升级到 2.70。
  • 开发中使用的嵌入式 Tomcat 升级到 9.0.73。
  • Log4j-api 和 core 升级到 2.20.0。
  • Jersey client, hk2 和 media 升级到 2.39。
  • Lombok 升级到 1.18.26。
  • Jsoup 升级到 1.15.4。
  • Groovy 升级到 4.0.10。
  • Hibernate 升级到 5.6.15.Final。
  • Commons-fileupload 升级到 1.5。
  • 升级文档和创新项目中的 PostgreSQL, Oracle and AS/400 版本。

其他改进

我们在其他方面也做了很多改进:

  • 新增使用 Kotlin 与 OpenXava 进行开发的文档(英文、西班牙文和中文)。
  • 新的 @ZerosFilled 注解等同于 ZEROS_FILLED/RELLENADO_CON_CEROS Stereotype。
  • 改进了属性的英文标签的自动翻译。
  • 在 xava.properties 中新增 defaultDescriptionPropertiesValueForDescriptionsList,用于 @DescriptionsList 默认值。
  • 在 naviox.properties 中新增 signInJSP 用于定义自定义登录页面。
  • HTML 中不再允许 Inline style。
  • 从 OpenXava 所有生成的 HTML 代码中删除了 Inline style。
  • org.openxava.web.Style 中用于 UI 生成器在内部使用的许多方法已删除,。
  • @Discussion 中帖子的时间使用日期的格式。
  • <xava:link> 和 <xava:image> 标签会忽略 cssStyle 属性。
  • 在 base.css 中新增替代 Inline 的方法,例如 ox-display-none、ox-width-100等。
  • 新增 <xava:nonce/> 标签,可生成用于内联 JavaScript 的随机数。
  • 新增 HtmlUnitUtils 中 getDefaultBrowser() 方法。
  • 新增 ISignInHelperProvider 中 getSignInURL() 方法。
  • ISignInHelperProvider 中 init() 方法的返回类型现在是 String[] 而不是 String。
  • 新增 DBServer 中带有端口号的 start(String dbName, int port) 方法。
  • 新增 NewAction 中 defaultValues 属性以键/值格式的字符串形式发送默认值。
  • 新增应用程序中使用的一些常用标签。

Bug 修复

虽然这不是维护版本,但我们也做了一些修复:

  • 修复了自定义参考指南文档中断开的链接。
  • 修复了如果用户偏好是不再存在的主题,则 UI 根本没有 CSS 样式。
  • 修复了从 OpenXava 6.6.3 迁移到 OpenXava 7.0 的迁移英语文档中的链接到不正确的部分。
  • 修复了 @Editor 在属性上调用 View.addValidValue() 无效。

blog comments powered by Disqus

English - Español