3.x.x release notes
3.3.0.RELEASE
EntityQuery
infrastructure changes:
-
CollectionEntityQueryExecutor
now supports aSupplier
for the collection -
an
EntityQueryExecutor
will now be registered automatically for any Spring DataCrudRepository
-
the default implementation is a
CollectionEntityQueryExecutor
using the repository to fetch all items -
previously only
JpaSpecificationExecutor
andQueryDslPredicateExecutor
would register anEntityQueryExecutor
-
-
EQL predicate
property IS EMPTY
will now check for empty string or null value when dealing with a string (text) property
New features:
-
it is now possible to specify default values for the template controls of embedded collections
-
an
EntityPropertyRegistrationHelper
component is now available which allows you to easily map an id property to its target entity-
this can be especially helpful when building a UI for entities spanning multiple datasources or from webservice APIs
-
-
a valid
EntityQueryExecutor
is now automatically registered when creating a manual association-
this removes the need to provide a custom
AssociatedEntityQueryExecutor
for manually defined associations
-
Bug-fixes and minor improvements:
-
fixed bug where list actions were added to table header row on a list view
-
uncaught exceptions are now registered as global validation errors on CRUD views
-
association tabs are now hidden if the user does not have the required
AllowableAction
on the target entity configuration -
simple value types (eg a domain-specific id type like
AuthorId
) will now render a textbox as control-
general rule is that any custom type without readable/writable properties will yield a textbox control
-
-
fixed some issues where the
ConversionService
was being ignored when working with custom id types -
EQL related:
-
fixed bug where a
NullPointerException
was thrown if an invalid EQL expression was entered in an advanced filter -
Java 8 time types are now supported for
now()
andtoday()
functions -
custom textbox types (eg
email
) are now supported for basic filtering-
this fixes a bug where a property marked with an
@Email
validator could not be used in basic filtering
-
-
3.2.0.RELEASE
This release contains a lot of internal changes, specifically related to the addition of the EntityPropertyController
and the EntityPropertiesBinder
.
Overall upgrading from the previous version should be seamless for most applications.
-
addition of
EntityAttributes.FORM_ENCTYPE
that can be specified asEntityViewFactory
orEntityPropertyDescriptor
attribute-
its value should be the actual enctype that should be used for submitting the form of a form view, eg
FormViewElement.ENC_MULTIPART
-
this is especially useful to change the form enctype based on the presence of property descriptors (for example a file property)
-
the attribute on a
EntityViewFactory
will take precedence, property descriptors will only be inspected if it is missing
-
-
more options are now available for fieldset property controls
-
a fieldset can now be rendered either as a HTML
FieldsetFormElement
or using a custom template -
a custom template can be configured on a property using the
ViewElementFieldset.TEMPLATE
attribute -
several default templates have been provided with default styling for common form layouts in Admin Web
-
if no property selector is specified, a fieldset property will select all child properties as its members
-
-
added support for filtering a list view based on
AllowableAction
-
this can be used to hide items from a list view if the user does not have the correct permissions
-
-
addition of the detail view which offers a readonly view for entities.
-
it’s possible to configure an entity to link to the detail view instead of the update view by default
-
-
link to the delete view (delete button) has moved from the tab menu (
EntityAdminMenu
) to the detail and update view-
see the customize link to delete view guide to revert to the previous behaviour.
-
-
embedded association views now include an inner page (tab) title and menu
-
the sub-menu is only rendered if there are at least 2 menu items
-
this allows an additional level of menu items for managing embedded associations
-
-
addition of the
EntityPropertiesBinder
which allows more advanced binding of custom properties-
each property is now backed by an
EntityPropertyController
which can be used to set behaviour (data fetching, writing) on a single property level
-
-
collections of embedded objects (eg
List<Address>
) are now fully supported and a default UI control will be generated -
several bugfixes and minor improvements:
-
fixed some issues with using
UUID
or other custom types as id for entities -
added default control support for
ZonedDateTime
andDuration
-
added EQL support for
CONTAINS NULL
as an alternative toIS EMPTY
-
this can be used in combination with groups:
CONTAINS (NULL,1)
is the equivalent orCONTAINS 1 or IS EMPTY
-
this also fixes some issues when using a collection type property in a basic EQL filter
-
-
improved EQL support for negative operands:
NOT CONTAINS (1,2)
now expands toNOT CONTAINS 1 AND NOT CONTAINS 2
-
3.1.0.RELEASE
-
if an
EntityAssociation
has a customEntityFactory
attribute, that factory will be used for both new instance and DTO creation-
previously it was only used for new instance creation
-
-
EntityModule now uses
evo-inflector
to auto-generate plural forms, this should yield better results in English -
the
String
formats of auditable properties can now be customized using global message codes:-
Auditable.createdDate
-
Auditable.created
-
Auditable.lastModifiedDate
-
Auditable.lastModified
-
-
several minor issues with EQL filtering have been fixed
-
EntityQuery
condition translation is now done recursively as long as the result is modified -
a
CollectionEntityQueryExecutor
implementation has been added that can be used to query a collection of objects if there is anEntityPropertyRegistry
which provides the property metadata of the collection members
3.0.1.RELEASE
-
the module dependencies for EntityModule have been optimized for re-use
-
as a result EntityModule no longer transitively pulls in BootstrapUiModule or AdminWebModule
-
when used without BootstrapUiModule, no default
ViewElement
rendering infrastructure will be available -
when used with BootstrapUiModule but without AdminWebModule, the default views for an entity will never get created and view support (
EntityViewFactory
) will be disabled
-
-
added support for
LocalDate
,LocalTime
andLocalDateTime
to be rendered usingDateTimeFormElement
-
it is now possible to configure default view element modes (eg. control or readonly rendering) on an
EntityConfiguration
-
these will be used in all cases where no specific configuration has been configured on property level
-
-
configuration & view builders support
AttributeRegistrar
for registering or removing attributes-
using
AttributeRegistrar
is useful if you want to use the owner of the attribute collection (eg. theEntityConfiguration
) -
common default registrars can be found in the
EntityAttributeRegistrars
utility class
-
-
entity views can now have a collection of configuration attributes
-
attributes can be used to influence or extend default behaviour, new attributes are available for permission checking and admin menu rendering
-
during view rendering attributes are accessible (and can be modified) using
EntityViewRequest.getConfigurationAttributes()
-
-
improvements to view configuration
-
EntityViewFactoryAttributes.ADMIN_MENU
attribute can be used to specify if a view should have an admin menu item added -
EntityViewFactoryAttributes.ACCESS_VALIDATOR
attribute can be used to determine how access to the view should be validated
-
-
added an
ExtensionViewProcessorAdapter
base class for easily creating a view for a custom extension class (see how-to) -
added
EntityViewCustomizers
utility class providing some helpers for customizingEntityViewFactoryBuilder
in a chainable fashion -
EntityModule no longer creates its own
Validator
instance, theregisterForMvc
related settings have been removed-
the validator used by EntityModule is the default MVC validator
-
-
it’s now possible to define a different message code prefix for module entities using properties
-
you can now force the required status of a control by setting the
EntityAttributes.REQUIRED_PROPERTY
attribute totrue
orfalse
on anEntityPropertyDescriptor
-
message codes for form groups and fieldsets have been extended, apart from
[description]
, there is now also built-in support for[help]
and[tooltip]
-
this constitutes a minor breaking change in that
[description]
content is now always rendered above the control of a form group. Previously this could be different depending on the type of control inside the form group. -
see the section configuring form controls text for a full explanation of the new message codes
-
-
the behaviour of when controls are prefixed with
entity.
has been changed-
when using
EntityViewCommand
all property controls of the base entity will should be prefixed withentity.
in order to map on theEntityViewCommand.entity
values -
previously this was done always when an
EntityViewCommand
was found on theViewElementBuilderContext
-
in the new version this is only done if there is also an attribute
EntityPropertyControlNamePostProcessor.PREFIX_CONTROL_NAMES
explicitly set totrue
on the builder context-
the latter is done automatically by the
PropertyRenderingViewProcessor
when building the initial controls
-
-
though not intentionally breaking, this change can have side effects with controls no longer being prefixed, developers are encouraged to test the custom forms they have
-
-
new components for linking to entity views have been introduced
-
the old
EntityLinkBuilder
interface and attributes are deprecated, but should still work as before -
see the chapter on linking to entity views for an overview of the new components
-