Page tree
Skip to end of metadata
Go to start of metadata

MultiValueFieldDefinition renders multiple fields that allow the user to either enter multiple values such as items in a shopping list or select multiple items such as categories for tagging content. The multivalue field saves the entered values as a LinkedList<T> collection by default. You can save them in a different way by using a multivalue property transformer.

Class: info.magnolia.ui.form.field.definition.MultiValueFieldDefinition

The multivalue field is commonly used to select targets inside Magnolia, for example categories for a page.

Multivalue field properties

Simple multivalue field configuration.

form:
  tabs:
    - name: tabMain
      label: Categories
      fields:
        - name: selectCategories
          class: info.magnolia.ui.form.field.definition.MultiValueFieldDefinition
          label: Select category
          field:
            name: linkField
            class: info.magnolia.ui.form.field.definition.LinkFieldDefinition
            targetWorkspace: category
            appName: categories
            identifierToPathConverter:
              class: info.magnolia.ui.form.field.converter.BaseIdentifierToPathConverter

Node name

Value

 form

 

 tabs

 

 tabMain

 

 fields

 

 selectCategories

 

 field

 

 identifierToPathConverter

 

 class

info.magnolia.ui.form.field.converter.BaseIdentifierToPathConverter

 class

info.magnolia.ui.form.field.definition.LinkFieldDefinition

 targetWorkspace

category

 appName

categories

 class

info.magnolia.ui.form.field.definition.MultiValueFieldDefinition

 label

Select category

  

You can use only the nametypelabeldescription and styleName common field properties  and the following properties in a multivalue field definition:

Properties

<field name>

required

Name of field

field

required

Parent node for the nested child field. Must be named "field".

class

required

Child field definition class.

<other properties>

required/optional*

Any other nodes and properties supported by the child field definition class. *Any required properties must be added.

buttonSelectAddLabel

optional, default is Add

Button label for adding more fields.

buttonSelectNewLabel

optional, default is Select new...

Button label for selecting an item.

buttonSelectOtherLabel

optional, default is Select another...

Button label for selecting a different item.

transformerClass

optional, default is info.magnolia.ui.form.field.transformer.multi.MultiValueTransformer

Property transformer class. Defines how the values are stored in the repository.

Best practice

When nesting multivalue fields, use the delegating transformer classes, DelegatingCompositeFieldTransformer or DelegatingMultiValueFieldTransformer, rather than the other available transformer classes.

Multivalue containing a single field

Here is an example of a multivalue field that contains a single text field. The parent shopping list is the multivalue field, list items are text fields.

In configuration, define the parent multivalue field first, then add a field node, and define the child field's properties under it.

form:
  tabs:
    - name: tabMain
      label: Main
      fields:
        - name: shoppingList
          class: info.magnolia.ui.form.field.definition.MultiValueFieldDefinition
          label: Shopping list
          field:
            class: info.magnolia.ui.form.field.definition.TextFieldDefinition
            label: Title
Node nameValue

 form

 

 tabs

 

 tabText

 

 fields

 

 shoppingList

 

 field

 

 class

info.magnolia.ui.form.field.definition.TextFieldDefinition

 label

Title

 class

info.magnolia.ui.form.field.definition.MultiValueFieldDefinition

 label

Shopping list

Multivalue containing a composite field

Here is an example event list. The parent list is a multivalue field. Each event is a composite field that consists of a text field and a date field.

Note how the NoOpCompositeTransformer is used to prevent the composite field from saving the field values. The NoOpCompositeTransformer hands the responsibility of saving values to the multivalue parent. The default transformer for the multivalue field is the MultiValueTransformer. However, here we cannot use it because it would store the child values in one multivalue property that looks like a comma separated list. That single property is bound to a single type. It cannot handle two different types of values: strings and dates. The solution is to use the MultiValueSubChildrenNodePropertiesTransformer which stores each value in a separate property, allowing them to be of different types.  

form:
  tabs:
    - name: tabText
      label: Multivalue composite
      fields:
        - name: events
          class: info.magnolia.ui.form.field.definition.MultiValueFieldDefinition
          label: Events
          transformerClass: info.magnolia.ui.form.field.transformer.multi.MultiValueSubChildrenNodePropertiesTransformer
          field:
            name: compositeField
            class: info.magnolia.ui.form.field.definition.CompositeFieldDefinition
            transformerClass: info.magnolia.ui.form.field.transformer.composite.NoOpCompositeTransformer
            fields:
              - name: title
                class: info.magnolia.ui.form.field.definition.TextFieldDefinition
                label: Title
              - name: date
                class: info.magnolia.ui.form.field.definition.DateFieldDefinition
                label: Date
Node nameValue

 form

 

 tabs

 

 tabText

 

 fields

 

 events

 

 field

 

 fields

 

 title

 

 class

info.magnolia.ui.form.field.definition.TextFieldDefinition

 label

Title

 date

 

 class

info.magnolia.ui.form.field.definition.DateFieldDefinition

 label

Date

 class

info.magnolia.ui.form.field.definition.CompositeFieldDefinition

 transformerClass

info.magnolia.ui.form.field.transformer.composite.NoOpCompositeTransformer

 class

info.magnolia.ui.form.field.definition.MultiValueFieldDefinition

 label

Events

 transformerClass

info.magnolia.ui.form.field.transformer.multi.MultiValueSubChildrenNodePropertiesTransformer
  • No labels