- All Implemented Interfaces:
AttachedObjectHandler,EditableValueHolderAttachedObjectHandler,FaceletHandler,ValueHolderAttachedObjectHandler
The <o:validator> is a taghandler that extends the standard <f:validator> tag
family with support for deferred value expressions in all attributes. In other words, the validator attributes are
not evaluated anymore on a per view build time basis, but just on every access like as with UI components and bean
properties. This has among others the advantage that they can be evaluated on a per-iteration basis inside an
iterating component, and that they can be set on a custom validator without needing to explicitly register it in a
tagfile.
Usage
When you specify for example the standard <f:validateLongRange> by
validatorId="jakarta.faces.LongRange", then you'll be able to use all its attributes such as
minimum and maximum as per its documentation, but then with the possibility to supply
deferred value expressions.
<o:validator validatorId="jakarta.faces.LongRange" minimum="#{item.minimum}" maximum="#{item.maximum}" />
The validator ID of all standard Faces validators can be found in
their javadocs.
First go to the javadoc of the class of interest, then go to VALIDATOR_ID in its field summary
and finally click the Constant Field Values link to see the value.
It is also possible to specify the validator message on a per-validator basis using the message
attribute. Any "{0}" placeholder in the message will be substituted with the label of the referenced input component.
Note that this attribute is ignored when the parent component has already validatorMessage specified.
<o:validator validatorId="jakarta.faces.LongRange" minimum="#{item.minimum}" maximum="#{item.maximum}"
message="Please enter between #{item.minimum} and #{item.maximum} characters" />
JSF 2.3 compatibility
The <o:validator> is currently not compatible with validators which are managed via the
managed=true attribute set on the FacesValidator annotation, at least not when using
Mojarra. Internally, the converters are wrapped in another instance which doesn't have the needed setter methods
specified. In order to get them to work with <o:validator>, the managed=true
attribute needs to be removed, so that OmniFaces ValidatorManager will automatically manage them.
- Author:
- Bauke Scholtz
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classSo that we can have a serializable validator. -
Field Summary
Fields inherited from class jakarta.faces.view.facelets.DelegatingMetaTagHandler
delegateFactoryFields inherited from class jakarta.faces.view.facelets.TagHandler
nextHandler, tag, tagId -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidapply(FaceletContext context, UIComponent parent) Create aValidatorbased on thebindingand/orvalidatorIdattributes as per the standard Faces<f:validator>implementation and collect the render time attributes.getTagAttribute(String name) protected TagHandlerDelegatebooleanisDisabled(FaceletContext context) Methods inherited from class jakarta.faces.view.facelets.ValidatorHandler
getValidatorConfig, getValidatorIdMethods inherited from class jakarta.faces.view.facelets.FaceletsAttachedObjectHandler
applyAttachedObject, getAttachedObjectHandlerHelper, getForMethods inherited from class jakarta.faces.view.facelets.DelegatingMetaTagHandler
applyNextHandler, createMetaRuleset, getBinding, getTag, getTagId, setAttributesMethods inherited from class jakarta.faces.view.facelets.TagHandler
getAttribute, getRequiredAttribute, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface jakarta.faces.view.AttachedObjectHandler
applyAttachedObject, getFor
-
Constructor Details
-
Validator
The constructor.- Parameters:
config- The validator config.
-
-
Method Details
-
apply
Create aValidatorbased on thebindingand/orvalidatorIdattributes as per the standard Faces<f:validator>implementation and collect the render time attributes. Then create an anonymousValidatorimplementation which wraps the createdValidatorand delegates the methods to it after setting the render time attributes only and only if thedisabledattribute evaluatestruefor the current request. Finally set the anonymous implementation on the parent component.- Specified by:
applyin interfaceFaceletHandler- Overrides:
applyin classDelegatingMetaTagHandler- Parameters:
context- The involved facelet context.parent- The parent component to add theValidatorto.- Throws:
IOException- If something fails at I/O level.
-
getTagAttribute
- Overrides:
getTagAttributein classDelegatingMetaTagHandler
-
getTagHandlerDelegate
- Overrides:
getTagHandlerDelegatein classValidatorHandler
-
isDisabled
- Overrides:
isDisabledin classDelegatingMetaTagHandler
-