Upgrade to 25.00
Esta documentación sirve como guía para actualizar las aplicaciones de webforJ de 24.00 a 25.00. Aquí están los cambios necesarios para que las aplicaciones existentes sigan funcionando sin problemas. Como siempre, consulte la visión general de lanzamientos en GitHub para obtener una lista más completa de cambios entre lanzamientos.
Servidores web Jetty 12
webforJ 25.00 y superior utilizan Jetty 12, usando la arquitectura de servlet Jakarta EE10. Si está utilizando el complemento Maven de Jetty para desarrollo, migre de Jakarta EE8 a Jakarta EE10. Esta actualización también requerirá reemplazar cualquier cosa que dependa del paquete javax.servlet
con el paquete Jakarta.servlet
.
Cambios en el archivo POM
Antes
<plugin>
<groupId>org.eclipse.jetty.ee8</groupId>
<artifactId>jetty-ee8-maven-plugin</artifactId>
<version>10.x.xx</version>
Después
<plugin>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-maven-plugin</artifactId>
<version>12.x.xx</version>
Cambios en la API para la clase App
Varios métodos obsoletos de App
se eliminan en 25.00. Las siguientes secciones describen qué métodos fueron reemplazados y las sustituciones recomendadas.
Registro en consola
La clase utilitaria BrowserConsole
, dedicada a crear registros estilizados en la consola del navegador, reemplaza los métodos consoleLog()
y consoleError()
. Obtenga el BrowserConsole
mediante el método console()
:
public class Application extends App{
@Override
public void run() throws WebforjException {
console().log("Mensaje de registro");
console().error("Mensaje de error");
}
}
Almacenamiento web
Para versiones anteriores a webforJ 25.00, la clase App
tiene los métodos getLocalStorage()
, getSessionStorage()
, y getCookieStorage()
para obtener instancias de las clases LocalStorage
, SessionStorage
y CookieStorage
, respectivamente. A partir de ahora, cada clase tiene un método getCurrent()
.
Consulte Almacenamiento Web para obtener más información.
Clase Request
La clase Request
ahora es responsable de obtener la URL, el puerto, el host y el protocolo de una aplicación. Así que en lugar de usar App.getUrl()
, use App.getCurrent().getUrl()
. El método getCurrent()
también reemplaza el método getRequest()
para obtener una instancia de la clase Request
.
La clase Request
también ha eliminado métodos, salte a Request
para verlos.
Clase Page
El método getPage()
se reemplaza con Page.getCurrent()
para obtener la instancia de la página actual.
Diálogos de opciones
En lugar de usar el método msgbox()
, utilice OptionDialog.showMessageDialog()
para crear diálogos de mensaje.
Terminación de la aplicación
El método cleanup()
ha sido eliminado. Ahora hay dos métodos para terminaciones, onWillTerminate()
y onDidTerminate()
.
Consulte Hooks para la terminación para obtener más información.
Ordenamiento de tablas
Para webforJ 25.00 y versiones superiores, las tablas utilizan ordenamiento de una sola columna por defecto. Las columnas solo se ordenarán por la cabecera de columna seleccionada más reciente. Para hacer que una tabla utilice ordenamiento de múltiples columnas, invoque el método setMultiSorting()
:
table.setMultiSorting(true);
Cuerpo de TabbedPane
oculto
El método hideBody()
se reemplaza con setBodyHidden()
para mantener una convención de nomenclatura consistente para los métodos.
Renderizando HTML dentro de componentes
En webforJ 25.00 y versiones superiores, hay un método setHtml()
para ayudar a distinguir entre establecer texto literal y HTML dentro de un componente.
Aún es posible establecer HTML usando el método setText()
, pero ahora requiere envolverlo explícitamente con etiquetas <html>
.
// Usos válidos de setText() y setHtml()
Button home = new Button();
home.setText("""
<html>
<h1>Inicio</h1>
</html>
""");
home.setHtml("<h1>Inicio</h1>");
home.setText("Inicio");
// Usos inválidos de setText() y setHtml()
Button home = new Button();
home.setText("<h1>Inicio</h1>");
Contenedores HTML
El paquete com.webforj.component.htmlcontainer
ya no está en webforJ. Utilice el paquete más completo com.webforj.component.element
en su lugar. Para una lista de clases de webforJ para elementos HTML estándar, vaya a Componentes de Elementos HTML.
Cambios en Request
-
Al igual que la eliminación del método
getCookieStorage()
para la claseApp
,Request
ya no tiene el métodogetCookie()
. Esto refuerza el uso deCookieStorgage.getCurrent()
para obtener una instancia de la claseCookieStorage
. -
El método
getQueryParam()
ahora esgetQueryParameter()
.
Cambios en WebforjBBjBridge
Obteniendo una instancia de WebforjBBjBridge
La clase Environment
ya no tiene el método getWebforjHelper()
, por lo que utilice getBridge()
en su lugar.
Usando el componente ConfirmDialog
para el método msgbox()
Versiones anteriores de webforJ usaron cadenas e enteros directamente para el método msgbox()
de WebforjBBjBridge
. Sin embargo, los mensajes para WebforjBBjBridge
en webforJ 25.00 y versiones superiores utilizan el componente ConfirmDialog
. Esto proporciona más control sobre qué botones se muestran y el tipo de mensaje.
Antes
Environment environment = Environment.getCurrent();
WebforjBBjBridge bridge = environment.getWebforjHelper();
int msgboxResult = bridge.msgbox("¿Está seguro de que desea eliminar este archivo?", 1, "Eliminación");
Después
Environment environment = Environment.getCurrent();
WebforjBBjBridge bridge = environment.getBridge();
ConfirmDialog dialog = new ConfirmDialog(
"¿Está seguro de que desea eliminar este archivo?", "Eliminación",
ConfirmDialog.OptionType.OK_CANCEL, ConfirmDialog.MessageType.QUESTION);
int msgboxResult = bridge.msgbox(dialog);
Corrección de tipografía de PasswordMediation
La clase enum PasswordMediation
, utilizada para indicar si se requiere que un usuario inicie sesión en cada visita a una aplicación con un componente Login
, tiene un error tipográfico en versiones anteriores de webforJ. SILENT
reemplaza el error tipográfico SILIENT
para webforJ 25.00 y versiones superiores.
Métodos de auto-enfoque
Para mantener la consistencia de webforJ, métodos como setAutofocus()
e isAutofocus()
ahora tienen una capitalización uniforme como la interfaz HasAutoFocus. Así que componentes como Dialog
y Drawer
utilizan setAutoFocus()
e isAutoFocus()
para 25.00 y versiones superiores.
BBjWindowAdapter
y Panel
marcados como final
Las clases BBjWindowAdapter
y Panel
ahora están declaradas como final
, lo que significa que ya no se pueden subclasear. Este cambio mejora la estabilidad y refuerza patrones de uso consistentes.