Class AttributeModifier

  • All Implemented Interfaces:
    Serializable, IComponentAwareEventSink, IComponentAwareHeaderContributor, IClusterable
    Direct Known Subclasses:
    AttributeAppender

    public class AttributeModifier
    extends Behavior
    implements IClusterable
    This class allows a tag attribute of a component to be modified dynamically with a value obtained from a model object. This concept can be used to programmatically alter the attributes of components, overriding the values specified in the markup. The two primary uses of this class are to allow overriding of markup attributes based on business logic and to support dynamic localization. The replacement occurs as the component tag is rendered to the response.

    The attribute whose value is to be modified must be given on construction of the instance of this class along with the model containing the value to replace with.

    If an attribute is not in the markup, this modifier will add an attribute.

    Instances of this class should be added to components via the Component.add(Behavior...) method after the component has been constructed.

    It is possible to create new subclasses of AttributeModifier by overriding the newValue(String, String) method. For example, you could create an AttributeModifier subclass which appends the replacement value like this:

     new AttributeModifier("myAttribute", model)
     {
            protected String newValue(final String currentValue, final String replacementValue)
            {
                    return currentValue + replacementValue;
            }
     };
     
    Author:
    Chris Turner, Eelco Hillenius, Jonathan Locke, Martijn Dashorst, Ralf Ebert
    See Also:
    Serialized Form
    • Constructor Detail

      • AttributeModifier

        public AttributeModifier​(String attribute,
                                 IModel<?> replaceModel)
        Create a new attribute modifier with the given attribute name and model to replace with. The attribute will be added with the model value or the value will be replaced with the model value if the attribute is already present.
        Parameters:
        attribute - The attribute name to replace the value for
        replaceModel - The model to replace the value with
      • AttributeModifier

        public AttributeModifier​(String attribute,
                                 Serializable value)
        Create a new attribute modifier with the given attribute name and model to replace with. The attribute will be added with the model value or the value will be replaced with the value if the attribute is already present.
        Parameters:
        attribute - The attribute name to replace the value for
        value - The value for the attribute
    • Method Detail

      • detach

        public final void detach​(Component component)
        Detach the value if it was a IDetachable. Internal method, shouldn't be called from the outside. If the attribute modifier is shared, the detach method will be called multiple times.
        Overrides:
        detach in class Behavior
        Parameters:
        component - the model that initiates the detachment
      • getAttribute

        public final String getAttribute()
        Returns:
        the attribute name to replace the value for
      • onComponentTag

        public final void onComponentTag​(Component component,
                                         ComponentTag tag)
        Description copied from class: Behavior
        Called any time a component that has this behavior registered is rendering the component tag.
        Overrides:
        onComponentTag in class Behavior
        Parameters:
        component - the component that renders this tag currently
        tag - the tag that is rendered
      • replaceAttributeValue

        public final void replaceAttributeValue​(Component component,
                                                ComponentTag tag)
        Checks the given component tag for an instance of the attribute to modify and if all criteria are met then replace the value of this attribute with the value of the contained model object.
        Parameters:
        component - The component
        tag - The tag to replace the attribute value for
      • getReplaceModel

        protected final IModel<?> getReplaceModel()
        Gets the replacement model. Allows subclasses access to replace model.
        Returns:
        the replace model of this attribute modifier
      • newValue

        protected Serializable newValue​(String currentValue,
                                        String replacementValue)
        Gets the value that should replace the current attribute value. This gives users the ultimate means to customize what will be used as the attribute value. For instance, you might decide to append the replacement value to the current instead of just replacing it as is Wicket's default.
        Parameters:
        currentValue - The current attribute value. This value might be null!
        replacementValue - The replacement value. This value might be null!
        Returns:
        The value that should replace the current attribute value
      • replace

        public static AttributeModifier replace​(String attributeName,
                                                IModel<?> value)
        Creates a attribute modifier that replaces the current value with the given value.
        Parameters:
        attributeName -
        value -
        Returns:
        the attribute modifier
        Since:
        1.5
      • replace

        public static AttributeModifier replace​(String attributeName,
                                                Serializable value)
        Creates a attribute modifier that replaces the current value with the given value.
        Parameters:
        attributeName -
        value -
        Returns:
        the attribute modifier
        Since:
        1.5
      • append

        public static AttributeAppender append​(String attributeName,
                                               IModel<?> value)
        Creates a attribute modifier that appends the current value with the given value using a default space character (' ') separator.
        Parameters:
        attributeName -
        value -
        Returns:
        the attribute modifier
        Since:
        1.5
        See Also:
        AttributeAppender
      • append

        public static AttributeAppender append​(String attributeName,
                                               Serializable value)
        Creates a attribute modifier that appends the current value with the given value using a default space character (' ') separator.
        Parameters:
        attributeName -
        value -
        Returns:
        the attribute modifier
        Since:
        1.5
        See Also:
        AttributeAppender
      • prepend

        public static AttributeAppender prepend​(String attributeName,
                                                IModel<?> value)
        Creates a attribute modifier that prepends the current value with the given value using a default space character (' ') separator.
        Parameters:
        attributeName -
        value -
        Returns:
        the attribute modifier
        Since:
        1.5
        See Also:
        AttributeAppender
      • prepend

        public static AttributeAppender prepend​(String attributeName,
                                                Serializable value)
        Creates a attribute modifier that prepends the current value with the given value using a default space character (' ') separator.
        Parameters:
        attributeName -
        value -
        Returns:
        the attribute modifier
        Since:
        1.5
        See Also:
        AttributeAppender
      • remove

        public static AttributeModifier remove​(String attributeName)
        Creates a attribute modifier that removes an attribute with the specified name
        Parameters:
        attributeName - the name of the attribute to be removed
        Returns:
        the attribute modifier
        Since:
        1.5