Appearance
@DependsOn
The @DependsOn annotation creates cascading dependencies between fields. When field A depends on field B, the UI will filter the available values of field A based on the current value of field B (cascading dropdowns).
Basic Usage
java
@Entity
@SquizyEntity
public class Address {
@ManyToOne(optional = false)
@NotNull
private Country country;
@DependsOn("country")
@ManyToOne(optional = false)
@NotNull
private State state;
@DependsOn("state")
@ManyToOne(optional = false)
@NotNull
private City city;
}In this example:
- Selecting a country filters the available states
- Selecting a state filters the available cities
How It Works
When a field depends on another field, the UI enforces the dependency visually and functionally:
- While the dependency field has no value, the dependent field is disabled — the user cannot interact with it or select a value.
- Once the dependency field is set, the dependent field becomes enabled and its available values are filtered based on the dependency value.
When the UI queries the available values for a dependent field, it passes the current value of the dependency field as an additional filter criterion. By default:
- For singular dependency fields (
@ManyToOne), theEQ(equals) operator is used - For plural dependency fields (collections), the
INoperator is used
The filter is applied automatically to the property query for the dependent field.
Attributes
value
The name of the field this field depends on:
java
@DependsOn("country")
private State state;modes
Controls in which UI modes the dependency is active:
java
@DependsOn(value = "country", modes = { Mode.CREATION })
private State state;Available modes: CREATION, EDITION. Defaults to both.
operator
Overrides the query operator used for filtering:
java
@DependsOn(value = "region", operator = QueryOperator.IN)
private State state;Default: EQ for singular fields, IN for plural fields.
filterField
Specifies which field of the dependent entity should be matched against the dependency value. If not specified, the same field name as value is used:
java
@DependsOn(value = "country", filterField = "countryOfOrigin")
private State state;manualMode
When true, the automatic filtering is disabled and the dependency is handled by a custom implementation:
java
@DependsOn(value = "country", manualMode = true)
private State state;Multiple Dependencies
A field can depend on multiple fields using repeatable annotations:
java
@DependsOn("country")
@DependsOn("type")
@ManyToOne
private Region region;