TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha1
  4. #29111

8.0.0-alpha1
TopLogic Release

2026-03-31

enhancement

major
#28994
TableComponent: ConfigKey sollte anpassbar sein
#29055
User-specified CSS classes cannot override default numeric alignment in table columns
#29084
JSON Schema Support for Typed Configuration
#29092
Multi-factor authentication and self-service account management
minor
#29037
Workflows beim Anwendungsstart hochladen/aktualisieren
#29095
Keine feste Referenz auf tl-build-processor in tl-parent-build
#29204
TreeGrid Modelbuilder API: Knotenprädikat bekommt Komponentenmodell nicht
nice-to-have
#29103
REST Client JSON Parser gegen leeren Content robust machen

defect

critical
#29080
Unerwünschte Zeilenobjekte in Tabellen bei Änderungen aus anderen Session
#29199
XSS-Schwachstelle in /jsp/openapi/server/displayAPISpec.jsp
major
#28674
Security Issues im UMLJS Projekt
#28710
Accounts mit wiederverwendetem Kontakt haben keine Berechtigung
#28993
Filter von dynamischen Spalten ignorieren den Attributtyp
#29042
Fehler in Spaltenfilter nach Double-Werten
#29107
StackOverflowError beim Zurückrollen im Transaktionsmonitor
#29111
JavaDoc-based I18N generation ignores custom ResKey in I18NConstants
minor
#27850
Modelleditor verschluckt Klassifikation mit Kleiner-Zeichen im Namen
#28456
Referenz auf fehlende Dateien in subsession.jsp
#28485
Immutable/Disbled Booleanfelder über Tab erreichbar/fokusierbar
#28651
Unnötiger Platz bei Inline-Tabellen
#28725
Sinnlose Scroll-Bar im Hilfe-Editor
#29053
TL-Script: format() mit null input liefert IllegalArgumentException
#29061
Fehlende Ersetzung von KnowledgeItem durch ObjectKey in Collections in Queries
#29066
"SafeHTML not started" Fehler bei scripted Tests
#29069
Ein berechnetes Attribut vom Typ "Allg. Suchausdruck" kann keine Closure zurückgeben
#29073
Auf abstrakte Attribute kann in transienten Objekten zugegriffen werden
#29074
In einer Wertetransformation eines Komponentenkanals kann nicht auf die Formulardaten einer Komponente zugegriffen werden
#29075
Nach Modell-Änderung können invalide gewordene berechnete Attribute nicht mehr editiert werden
#29076
API-Key in REST-Schnittstellenkonfiguration wird nicht verborgen
#29087
Fehlerhafter Zugriff auf den D&D Cache im Browser
#29091
Werte eines Kompositionsattribut nicht bearbeitbar, wenn im gleichen Formular vorher verwendet
#29106
Fehler beim Restart der KnowledgeBase
#29112
Update minimatch and serialize-javascript to fix CVE-2026-27903, CVE-2026-27904, and GHSA-5c6j-r48x-rmvq
#29197
Eclipse-Fehler nach Dependency-Update: maven-jar-plugin 3.5.0 verursacht „outside of a scoping block"-Fehler in m2e

update

critical
#29110
Update dependency com.fasterxml.jackson.core:jackson-core to v2.21.1 [SECURITY]
defect

major

#29111

JavaDoc-based I18N generation ignores custom ResKey in I18NConstants

I18NMigration

When a ResKey field in an I18NConstants class is pre-initialized with a custom key via ResKey.internalCreate(), the TLDoclet generates the messages_en.properties entry under the normative key (class.pkg.ClassName.FIELD_NAME) instead of the custom key. At runtime, the field holds the custom key, so the localized string from JavaDoc is never found.

Example

{{{#!java /**

  • @en Play audio */

public static ResKey JS_AUDIO_PLAYER_PLAY = ResKey.internalCreate("js.audioPlayer.play"); }}}

  • TLDoclet generates: class.com.top_logic.layout.react.I18NConstants.JS_AUDIO_PLAYER_PLAY = Play audio (in META-INF/messages_en.properties)
  • Runtime looks up: js.audioPlayer.play (the custom key from internalCreate)
  • Result: English text is never found under the runtime key

This forces developers to manually duplicate the translations in a separate WEB-INF/conf/resources/*.messages_en.properties file.

Proposed Fix

Add a @CustomKey annotation that can be placed on ResKey fields in I18NConstants classes. Both the doclet and the runtime initializer read this annotation to derive the correct key.

Before (broken JavaDoc generation): {{{#!java public static ResKey JS_AUDIO_PLAYER_PLAY = ResKey.internalCreate("js.audioPlayer.play"); }}}

After (JavaDoc generation works correctly): {{{#!java @CustomKey("js.audioPlayer.play") public static ResKey JS_AUDIO_PLAYER_PLAY; }}}

Changes needed:

  1. New annotation @CustomKey in com.top_logic.basic.i18n (@Target(FIELD), @Retention(RUNTIME))
  2. I18NConstantsBase.initField(): check for @CustomKey annotation, use its value instead of normative key
  3. TLDoclet.collectI18NConstantDoc(): check for @CustomKey annotation, use its value instead of normative key
  4. Migrate existing ResKey.internalCreate() usages in I18NConstants classes

Code-Migration

legacyKey() calls replaced by @CustomKey annotation

All ResKey fields in I18NConstants classes that used legacyKey(), legacyKey1(), legacyKey2(), etc. to assign a custom resource key must now use the @CustomKey annotation instead.

Before: {{{#!java public static ResKey MY_KEY = legacyKey("my.custom.key"); public static ResKey1 MY_KEY_1 = legacyKey1("my.custom.key"); }}}

After: {{{#!java @CustomKey("my.custom.key") public static ResKey MY_KEY;

@CustomKey("my.custom.key") public static ResKey1 MY_KEY_1; }}}

The field must not be initialized — initConstants() handles it using the custom key from the annotation.

This ensures that both the runtime (I18NConstantsBase) and the build-time doclet (TLDoclet) use the same custom key, so that @en JavaDoc translations are correctly written to messages_en.properties under the custom key.

Migrating WEB-INF resource properties to JavaDoc

A migration tool MigrateResourcesToJavaDoc is available in com.top_logic.layout.tools.cleanup to automatically move English translations from WEB-INF/conf/resources/*_en.properties files into @en JavaDoc tags on the corresponding ResKey fields. The tool respects @CustomKey annotations when matching keys to fields. After migration, the entries are removed from the properties files.

  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • EN
  • Login