Package org.springframework.ui

# Class ConcurrentModel

java.lang.Object
java.util.AbstractMap<K,V>
java.util.concurrent.ConcurrentHashMap<String,Object>
org.springframework.ui.ConcurrentModel

All Implemented Interfaces:
  `Serializable`, `ConcurrentMap<String,Object>`, `Map<String,Object>`, `Model`

Direct Known Subclasses:
  `BindingAwareConcurrentModel`

public class ConcurrentModel extends ConcurrentHashMap<String,Object> implements Model
Implementation of the `Model` interface based on a `ConcurrentHashMap` for use in concurrent scenarios.

Exposed to handler methods by Spring WebFlux, typically via a declaration of the `Model` interface. There is typically no need to create it within user code. If necessary a handler method can return a regular `java.util.Map`, likely a `java.util.ConcurrentMap`, for a pre-determined model.

Since:
  5.0
Author:
  Rossen Stoyanchev
See Also:
  - Serialized Form

## Nested Class Summary

## Nested classes/interfaces inherited from class java.util.concurrent.ConcurrentHashMap

`ConcurrentHashMap.KeySetView<K extends Object,V extends Object>`

## Nested classes/interfaces inherited from class java.util.AbstractMap

`AbstractMap.SimpleEntry<K extends Object,V extends Object>, AbstractMap.SimpleImmutableEntry<K extends Object,V extends Object>`

## Nested classes/interfaces inherited from interface java.util.Map

`Map.Entry<K extends Object,V extends Object>`

## Constructor Summary

Constructors
Constructor
Description
`ConcurrentModel()`
Construct a new, empty `ConcurrentModel`.
`ConcurrentModel(Object attributeValue)`
Construct a new `ConcurrentModel` containing the supplied attribute.
`ConcurrentModel(String attributeName, Object attributeValue)`
Construct a new `ConcurrentModel` containing the supplied attribute under the supplied name.

## Method Summary

Modifier and Type
Method
Description
`ConcurrentModel`
`addAllAttributes(Collection<?> attributeValues)`
Copy all attributes in the supplied `Collection` into this `Map`, using attribute name generation for each element.
`ConcurrentModel`
`addAllAttributes(Map<String,?> attributes)`
Copy all attributes in the supplied `Map` into this `Map`.
`ConcurrentModel`
`addAttribute(Object attributeValue)`
Add the supplied attribute to this `Map` using a `generated name`.
`ConcurrentModel`
`addAttribute(String attributeName, Object attributeValue)`
Add the supplied attribute under the supplied name.
`Map<String,Object>`
`asMap()`
Return the current set of model attributes as a Map.
`boolean`
`containsAttribute(String attributeName)`
Does this model contain an attribute of the given name?
`Object`
`getAttribute(String attributeName)`
Return the attribute value for the given name, if any.
`ConcurrentModel`
`mergeAttributes(Map<String,?> attributes)`
Copy all attributes in the supplied `Map` into this `Map`, with existing objects of the same name taking precedence (i.e.
`Object`
`put(String key, Object value)`
`void`
`putAll(Map<? extends String,?> map)`

### Methods inherited from class java.util.concurrent.ConcurrentHashMap

`clear, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, forEach, forEach, forEachEntry, forEachEntry, forEachKey, forEachKey, forEachValue, forEachValue, get, getOrDefault, hashCode, isEmpty, keys, keySet, keySet, mappingCount, merge, newKeySet, newKeySet, putIfAbsent, reduce, reduceEntries, reduceEntries, reduceEntriesToDouble, reduceEntriesToInt, reduceEntriesToLong, reduceKeys, reduceKeys, reduceKeysToDouble, reduceKeysToInt, reduceKeysToLong, reduceToDouble, reduceToInt, reduceToLong, reduceValues, reduceValues, reduceValuesToDouble, reduceValuesToInt, reduceValuesToLong, remove, remove, replace, replace, replaceAll, search, searchEntries, searchKeys, searchValues, size, toString, values`

### Methods inherited from class java.util.AbstractMap

`clone`

### Methods inherited from class java.lang.Object

`finalize, getClass, notify, notifyAll, wait, wait, wait`

## Constructor Details

### ConcurrentModel

public ConcurrentModel()
Construct a new, empty `ConcurrentModel`.

### ConcurrentModel

public ConcurrentModel(String attributeName, Object attributeValue)
Construct a new `ConcurrentModel` containing the supplied attribute under the supplied name.

See Also:
  - `addAttribute(String, Object)`

### ConcurrentModel

public ConcurrentModel(Object attributeValue)
Construct a new `ConcurrentModel` containing the supplied attribute.

Uses attribute name generation to generate the key for the supplied model object.

See Also:
  - `addAttribute(Object)`

## Method Details

### put

@Nullable public Object put(String key, @Nullable Object value)

Specified by:
  `put` in interface `Map<String,Object>`
Overrides:
  `put` in class `ConcurrentHashMap<String,Object>`

### putAll

public void putAll(Map<? extends String,?> map)

Specified by:
  `putAll` in interface `Map<String,Object>`
Overrides:
  `putAll` in class `ConcurrentHashMap<String,Object>`

### addAttribute

public ConcurrentModel addAttribute(String attributeName, @Nullable Object attributeValue)
Add the supplied attribute under the supplied name.

Specified by:
  `addAttribute` in interface `Model`
Parameters:
  `attributeName` - the name of the model attribute (never `null`)
  `attributeValue` - the model attribute value (ignored if `null`, just removing an existing entry if any)

### addAttribute

public ConcurrentModel addAttribute(Object attributeValue)
Add the supplied attribute to this `Map` using a `generated name`.

Note: Empty `Collections` are not added to the model when using this method because we cannot correctly determine the true convention name. View code should check for `null` rather than for empty collections as is already done by JSTL tags.

Specified by:
  `addAttribute` in interface `Model`
Parameters:
  `attributeValue` - the model attribute value (never `null`)

### addAllAttributes

public ConcurrentModel addAllAttributes(@Nullable Collection<?> attributeValues)
Copy all attributes in the supplied `Collection` into this `Map`, using attribute name generation for each element.

Specified by:
  `addAllAttributes` in interface `Model`
See Also:
  - `addAttribute(Object)`

### addAllAttributes

public ConcurrentModel addAllAttributes(@Nullable Map<String,?> attributes)
Copy all attributes in the supplied `Map` into this `Map`.

Specified by:
  `addAllAttributes` in interface `Model`
See Also:
  - `addAttribute(String, Object)`

### mergeAttributes

public ConcurrentModel mergeAttributes(@Nullable Map<String,?> attributes)
Copy all attributes in the supplied `Map` into this `Map`, with existing objects of the same name taking precedence (i.e. not getting replaced).

Specified by:
  `mergeAttributes` in interface `Model`

### containsAttribute

public boolean containsAttribute(String attributeName)
Does this model contain an attribute of the given name?

Specified by:
  `containsAttribute` in interface `Model`
Parameters:
  `attributeName` - the name of the model attribute (never `null`)
Returns:
  whether this model contains a corresponding attribute

### getAttribute

@Nullable public Object getAttribute(String attributeName)
Description copied from interface: `Model`
Return the attribute value for the given name, if any.

Specified by:
  `getAttribute` in interface `Model`
Parameters:
  `attributeName` - the name of the model attribute (never `null`)
Returns:
  the corresponding attribute value, or `null` if none

### asMap

public Map<String,Object> asMap()
Description copied from interface: `Model`
Return the current set of model attributes as a Map.

Specified by:
  `asMap` in interface `Model`