You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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.

See also Which transformer should I use?

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
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels