Eclipse Scout Release Notes
About This Release
The latest version of this release is: 25.2.0-beta.0.
You can see the detailed change log on GitHub.
Coming from an older Scout version? Check out the Migration Guide for instructions on how to obtain the new version and upgrade existing applications.
The here described functionality has not yet been released and is part of an upcoming release. |
New Build & Runtime Requirements
Scout 25.2 requires at least the following:
-
Build and runtime of Scout 25.2 require Java 24 (Java 21 support has been dropped). The compiler target level is set to Java 21. We plan to update to Java 25 LTS as soon as it is available.
New Data Object API for Scout JS
Scout JS now supports DataObjects to be written as classes in TypeScript.
A new serialization mechanisms takes care of recursively (de)serializing such DataObjects in a way compatible with the Scout Java backends.
It supports base types like number
, string
, boolean
, but also more complex types like Array
, Date
, Map
, Set
or nested Data Objects.
Also, TypeScript specific types like Record
or string literal types are supported.
Please read the DO documentation for Scout JS for more details and the advantages of the new API. It is recommended to switch to the new API where ever possible by following the steps from the migration guide. An example implementation can be found in the REST HowTo which might be helpful to understand the new concepts.
Behavior Change of Scout JS Utilities objects.valueCopy, objects.equals And objects.equalsRecursive
In order to support the new class-based Data Objects, these functions had to be improved as follows:
-
Date
: is compared by its value (rather than the reference===
as before) and copied by value (new instance is created). -
Map
: is deeply compared by its content (rather than the reference===
as before) and deeply copied. -
Set
: is deeply compared by its content (rather than the reference===
as before) and deeply copied. -
The function
objects.valueCopy
uses the functionclone
if existing to create deep clones (except forWidgets
). -
The function
objects.equalsRecursive
uses the same equals logic asobjects.equals
which includes equality for empty arrays and the use of theequals
functions of the objects, if available.
IId signature
The mechanism that adds signatures to IId
is now available for the service tunnel.
For more information see IId signatures in service tunnel.
Migration handler for deletion of data object contributions
The new AbstractRemoveDoEntityContributionValueMigrationHandler
can be used when a data object contribution class is completely deleted.
This migration handler will remove the contribution with the given type name and type version from the data objects.
Table (Scout JS)
Default Row Action
The Scout JS Table
has a new property defaultRowAction
of type Action
.
If set, this action is executed when a row is double-clicked.
Prior to the execution, a rowAction
event is triggered.
When default is prevented on this event, the defaultRowAction
is not executed.
The defaultRowAction
can be used to execute a particular Menu
of the Table
on a row action.
It can be specified in the TableModel
by referencing the id of the Menu
.
defaultRowAction: 'MyMenu',
menus: [{
id: 'MyMenu',
objectType: Menu
}]
Column: Improved API
Some new methods have been added to easier get the cells and their values:
cells()
, cellValues()
, selectedCells()
, selectedCellValue()
, selectedCellValues()
, checkedCellValue()
, checkedCellValues()
.
New API to insert, delete or set columns
The new methods insertColumn
, insertColumns
, deleteColumn
, deleteColumns
and setColumns
can be used to modify the columns
of the Table
.
The columns inserted using insertColumn
, insertColumns
or setColumns
are initialized with an initValue
that can be passed to the methods directly or in form of a callback.
When the columns
of the Table
are modified using one of these methods the Table
will automatically recalculate its checkable and table node column, re-apply filters and apply sorting, grouping and background effects.
Therefore, method setColumns
can also be used to change and apply e.g. sort properties of multiple columns at once.
In order to do so, simply change the properties of the columns and call
table.setColumns([...table.columns]);
Move Table Row Menu Helper
If you need menus that move rows of a table up or down, you can use the new MoveTableRowMenuHelper
.
The helper implements actions for the move menus and updates their states (enabled, visible) accordingly.
To use it, just create the helper and install it for your menus:
const moveRowHelper = scout.create(MoveTableRowMenuHelper);
moveRowHelper.install({table, moveRowUpMenu, moveRowDownMenu});
Search Form Table Control
The Scout JS table control SearchFormTableControl
was added in order to add search forms to a PageWithTable
.
The PageWithTable
uses the data of the search form as its search filter each time the data is loaded
(see Search Form for more details).
Table Organizer Menu
In the top right corner of the table header is a menu with a gear icon that opens the table organizer form. This form has been simplified and now has a cleaner look.
Also, the menu is now available for Scout JS tables.
It is visible by default for the table of a PageWithTable
.
If it should be visible for other tables as well, just add the menu TableOrganizerMenu
to the menus of your table.
table: {
objectType: Table,
menus: [
{
objectType: TableOrganizerMenu
}
]
}

Table UI Preferences
Adjustments to a table made by the user (e.g. column visibility, column width, sort order) can now be stored and preserved between sessions. If the Table Organizer Menu is enabled, users can create additional table profiles that they can apply later.
This feature can be enabled manually by setting the property uiPreferencesEnabled
.
If enabled, the table should also have a unique uuuid
to ensure that the preferences are assigned to the correct table.
By default, uiPreferencesEnabled is set to true
for all detail tables of all table pages.
In this case, the table does not need a unique uuid
as long as the page already has one.
Preferences are stored in the browser’s local storage by default. Refer to the UI Preferences documentation for more information about how to change this.
New Section in Table Column Menu
The column menu now has a section called Width
containing the following actions:
-
Optimize width: makes the column as big as necessary to show its content
-
Optimize width of all columns: makes all columns as big as necessary to show their content
-
Adjust width: allows the user to set the width in pixels of that column

Slider
The Slider
widget is now rendered using multiple <div>
instead of the browser-native <input type="range">
.
This allows for a more precise adjustment of the appearance.
The SliderField
now also allows entering the desired value by hand.
It has two new properties:
-
valueEditable
: Whether there is a label or a number field to the right of the slider. -
tabbable
: Makes this slider tabbable.