跳至主要内容

Upgrade to 25.00

在 ChatGPT 中打开

本 документация 是为了指导将 webforJ 应用程序从 24.00 升级到 25.00。以下是现有应用程序继续顺利运行所需的更改。像往常一样,请查看 GitHub 发布概述,以获取不同版本之间更全面的更改列表。

Jetty 12 网络服务器

webforJ 25.00 及更高版本使用 Jetty 12,采用 Jakarta EE10 servlet 架构。如果您在开发中使用 Jetty Maven 插件,请将其从 Jakarta EE8 迁移到 Jakarta EE10。此升级还将需要用 Jakarta.servlet 包替换依赖于 javax.servlet 包的任何内容。

POM 文件更改

之前

<plugin>
<groupId>org.eclipse.jetty.ee8</groupId>
<artifactId>jetty-ee8-maven-plugin</artifactId>
<version>10.x.xx</version>

之后

<plugin>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-maven-plugin</artifactId>
<version>12.x.xx</version>

App 类的 API 更改

在 25.00 中删除了几个已弃用的 App 方法。以下部分概述了哪些方法被替换以及推荐的替代方法。

控制台日志记录

用于创建样式化日志到浏览器控制台的工具类 BrowserConsole 替代了 consoleLog()consoleError() 方法。通过使用 console() 方法获取 BrowserConsole

public class Application extends App{

@Override
public void run() throws WebforjException {
console().log("日志信息");
console().error("错误信息");
}
}

Web 存储

对于 webforJ 25.00 之前的版本,App 类有 getLocalStorage()getSessionStorage()getCookieStorage() 方法来获取 LocalStorageSessionStorageCookieStorage 类的实例。今后,每个类都有一个 getCurrent() 方法。

有关更多信息,请参阅 Web Storage

Request

Request 类现在负责获取应用程序的 URL、端口、主机和协议。因此,使用 App.getUrl() 的地方请使用 App.getCurrent().getUrl()getCurrent() 方法还替代了 getRequest() 方法,用于获取 Request 类的实例。

信息

Request 类还删除了方法,跳转到 Request 以查看它们。

Page

getPage() 方法被 Page.getCurrent() 替换,以获取当前页面实例。

选项对话框

请使用 OptionDialog.showMessageDialog() 创建消息对话框,而不是使用 msgbox() 方法。

应用程序终止

cleanup() 方法已被删除。现在有两个终止方法,即 onWillTerminate()onDidTerminate()

有关更多信息,请参阅 Hooks for termination

表排序

对于 webforJ 25.00 及更高版本,表格默认使用单列排序。列仅按最近选择的列标题进行排序。要使表格使用多列排序,请调用 setMultiSorting() 方法:

table.setMultiSorting(true);

隐藏的 TabbedPane 正文

hideBody() 方法被 setBodyHidden() 替换,以保持方法命名的一致性。

在组件中渲染 HTML

在 webforJ 25.00 及更高版本中,存在一个 setHtml() 方法,以帮助区分在组件内部设置文本和 HTML 文本。使用 setText() 方法设置 HTML 仍然是可能的,但现在需要明确用 <html> 标签包裹它。

// setText() 和 setHtml() 的有效用法
Button home = new Button();

home.setText("""
<html>
<h1>首页</h1>
</html>
""");

home.setHtml("<h1>首页</h1>");

home.setText("首页");
// setText() 和 setHtml() 的无效用法
Button home = new Button();
home.setText("<h1>首页</h1>");

HTML 容器

com.webforj.component.htmlcontainer 包在 webforJ 中不再存在。请改用功能更丰富的 com.webforj.component.element 包。有关标准 HTML 元素的 webforJ 类的列表,请访问 HTML Element Components

Request 更改

  • 正如 App 类的 getCookieStorage() 方法被移除一样,Request 也不再具有 getCookie() 方法。这增强了使用 CookieStorgage.getCurrent() 获取 CookieStorage 类的实例的强制性。

  • getQueryParam() 方法现在为 getQueryParameter()

WebforjBBjBridge 更改

获取 WebforjBBjBridge 实例

Environment 类不再具有 getWebforjHelper() 方法,因此请改用 getBridge()

使用 ConfirmDialog 组件替代 msgbox() 方法

之前版本的 webforJ 使用字符串和整数直接传递给 WebforjBBjBridgemsgbox() 方法。然而,在 webforJ 25.00 及更高版本中,WebforjBBjBridge 的消息使用 ConfirmDialog 组件。这提供了更多控制,以显示哪些按钮和消息类型。

之前

Environment environment = Environment.getCurrent();
WebforjBBjBridge bridge = environment.getWebforjHelper();

int msgboxResult = bridge.msgbox("您确定要删除此文件吗?", 1, "删除");

之后

Environment environment = Environment.getCurrent();
WebforjBBjBridge bridge = environment.getBridge();

ConfirmDialog dialog = new ConfirmDialog(
"您确定要删除此文件吗?", "删除",
ConfirmDialog.OptionType.OK_CANCEL, ConfirmDialog.MessageType.QUESTION);

int msgboxResult = bridge.msgbox(dialog);

PasswordMediation 拼写纠正

枚举类 PasswordMediation 用于指示用户是否需要在每次访问应用程序时登录,有一个拼写错误。SILENT 替换了之前 webforJ 版本中的拼写错误 SILIENT,适用于 webforJ 25.00 及更高版本。

自动聚焦方法

为了保持 webforJ 一致性,setAutofocus()isAutofocus() 等方法现在具有统一的大小写,就像 HasAutoFocus 接口一样。因此,像 DialogDrawer 这样的组件在 25.00 及更高版本中使用 setAutoFocus()isAutoFocus()

BBjWindowAdapterPanel 标记为 final

BBjWindowAdapterPanel 类现在声明为 final,这意味着它们不再可以被子类化。此更改提高了稳定性并强制执行一致的使用模式。