Zum Hauptinhalt springen

Upgrade to 25.00

In ChatGPT öffnen

Diese Dokumentation dient als Leitfaden zum Upgrade von webforJ-Anwendungen von 24.00 auf 25.00. Hier sind die Änderungen, die für bestehende Apps erforderlich sind, um weiterhin reibungslos zu funktionieren. Wie immer finden Sie die GitHub-Release-Übersicht für eine umfassendere Liste der Änderungen zwischen den Versionen.

Jetty 12-Webserver

webforJ 25.00 und höher verwenden Jetty 12, das die Jakarta EE10-Servlet-Architektur nutzt. Wenn Sie das Jetty Maven-Plugin für die Entwicklung verwenden, migrieren Sie von Jakarta EE8 zu Jakarta EE10. Dieses Upgrade erfordert auch, alles, was auf dem Paket javax.servlet basierte, durch das Paket Jakarta.servlet zu ersetzen.

Änderungen der POM-Datei

Vorher

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

Nachher

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

API-Änderungen für die App-Klasse

Mehrere veraltete App-Methoden wurden in 25.00 entfernt. Die folgenden Abschnitte umreißen, welche Methoden ersetzt wurden und welche empfohlenen Ersetzungen es gibt.

Konsolenprotokollierung

Die Utility-Klasse BrowserConsole, die zum Erstellen von formatierten Protokollen in der Browserkonsole verwendet wird, ersetzt die Methoden consoleLog() und consoleError(). Holen Sie sich die BrowserConsole, indem Sie die Methode console() verwenden:

public class Application extends App{

@Override
public void run() throws WebforjException {
console().log("Protokollnachricht");
console().error("Fehlermeldung");
}
}

Web-Speicher

Für Versionen vor webforJ 25.00 hat die App-Klasse die Methoden getLocalStorage(), getSessionStorage() und getCookieStorage(), um Instanzen der Klassen LocalStorage, SessionStorage und CookieStorage zu erhalten. Zukünftig hat jede Klasse eine Methode getCurrent().

Siehe Web Storage für weitere Informationen.

Request-Klasse

Die Request-Klasse ist jetzt dafür verantwortlich, die URL, den Port, den Host und das Protokoll einer App abzurufen. Anstelle von App.getUrl() verwenden Sie App.getCurrent().getUrl(). Die Methode getCurrent() ersetzt auch die Methode getRequest(), um eine Instanz der Request-Klasse zu erhalten.

Info

Die Request-Klasse hat ebenfalls entfernte Methoden, springen Sie zu Request, um sie zu sehen.

Page-Klasse

Die Methode getPage() wurde durch Page.getCurrent() ersetzt, um die aktuelle Seiteninstanz abzurufen.

Optionsdialoge

Verwenden Sie anstelle der Methode msgbox() den OptionDialog.showMessageDialog(), um Nachrichtendialoge zu erstellen.

App-Beendigung

Die Methode cleanup() wurde entfernt. Es gibt jetzt zwei Methoden für Beendigungen: onWillTerminate() und onDidTerminate().

Siehe Hooks für die Beendigung für weitere Informationen.

Tabellensortierung

Für webforJ 25.00 und höher verwenden Tabellen standardmäßig die Sortierung nach einer einzelnen Spalte. Spalten werden nur nach dem zuletzt ausgewählten Spaltenkopf sortiert. Um eine Tabelle für die Mehrspaltensortierung zu verwenden, rufen Sie die Methode setMultiSorting() auf:

table.setMultiSorting(true);

Versteckter TabbedPane-Körper

Die Methode hideBody() wurde durch setBodyHidden() ersetzt, um eine konsistente Namenskonvention für Methoden zu wahren.

Rendering von HTML innerhalb von Komponenten

In webforJ 25.00 und höher gibt es eine Methode setHtml(), um zwischen dem Setzen von literalem und HTML-Text innerhalb einer Komponente zu unterscheiden. Das Setzen von HTML mit der Methode setText() ist weiterhin möglich, erfordert jedoch jetzt explizites Umschließen mit <html>-Tags.

// Gültige Verwendungen von setText() und setHtml()
Button home = new Button();

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

home.setHtml("<h1>Startseite</h1>");

home.setText("Startseite");
// Ungültige Verwendungen von setText() und setHtml()
Button home = new Button();
home.setText("<h1>Startseite</h1>");

HTML-Container

Das Paket com.webforj.component.htmlcontainer ist nicht mehr in webforJ vorhanden. Verwenden Sie stattdessen das funktionsreichere Paket com.webforj.component.element. Für eine Liste von webforJ-Klassen für Standard-HTML-Elemente siehe HTML Element Components.

Änderungen bei Request

  • Wie die Entfernung der Methode getCookieStorage() für die App-Klasse hat Request auch nicht mehr die Methode getCookie(). Dies verstärkt die Verwendung von CookieStorage.getCurrent(), um eine Instanz der CookieStorage-Klasse zu erhalten.

  • Die Methode getQueryParam() heißt jetzt getQueryParameter().

Änderungen bei WebforjBBjBridge

Abrufen einer Instanz von WebforjBBjBridge

Die Klasse Environment hat nicht mehr die Methode getWebforjHelper(), verwenden Sie stattdessen getBridge().

Verwendung der ConfirmDialog-Komponente für die Methode msgbox()

Frühere Versionen von webforJ verwendeten Zeichenfolgen und Ganzzahlen direkt für die msgbox()-Methode von WebforjBBjBridge. Nachrichten für WebforjBBjBridge in webforJ 25.00 und höher verwenden die ConfirmDialog-Komponente. Dies bietet mehr Kontrolle über die angezeigten Schaltflächen und den Nachrichtentyp.

Vorher

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

int msgboxResult = bridge.msgbox("Sind Sie sicher, dass Sie diese Datei löschen möchten?", 1, "Löschung");

Nachher

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

ConfirmDialog dialog = new ConfirmDialog(
"Sind Sie sicher, dass Sie diese Datei löschen möchten?", "Löschung",
ConfirmDialog.OptionType.OK_CANCEL, ConfirmDialog.MessageType.QUESTION);

int msgboxResult = bridge.msgbox(dialog);

Rechtschreibkorrektur von PasswordMediation

Die Enum-Klasse PasswordMediation, die angibt, ob ein Benutzer bei jedem Besuch einer App mit einer Login-Komponente angemeldet werden muss, hatte in früheren webforJ-Versionen einen Tippfehler. SILENT ersetzt den Tippfehler SILIENT für webforJ 25.00 und höher.

Auto-Fokus-Methoden

Um webforJ konsistent zu halten, haben Methoden wie setAutofocus() und isAutofocus() jetzt eine einheitliche Großschreibung wie das Interface HasAutoFocus. Daher verwenden Komponenten wie Dialog und Drawer für 25.00 und höher setAutoFocus() und isAutoFocus().

BBjWindowAdapter und Panel als final markiert

Die Klassen BBjWindowAdapter und Panel sind jetzt als final deklariert, was bedeutet, dass sie nicht mehr unterklassenfähig sind. Diese Änderung verbessert die Stabilität und erzwingt konsistente Nutzungsmuster.