- 

Available since OmniFaces 1.5

Unlike native Faces validation error messages, in a bean validation message by default the label of the component where a validation constraint violation originated from can not be displayed in the middle of a message. Using the jakarta.faces.validator.BeanValidator.MESSAGE bundle key such label can be put in front or behind the message, but that's it. With this JsfLabelMessageInterpolator a label can appear in the middle of a message, by using the special placeholder {jsf.label} in bean validation messages.

Note that Bean Validation is not only called from within Faces, and as such Faces might not be available. If Faces is not available occurrences of {jsf.label} will be replaced by an empty string. The user should take care that messages are compatible with both situations if needed.

This message interpolator is not needed for putting a component label before or after a bean validation message. That functionality is already provided by Faces itself via the jakarta.faces.validator.BeanValidator.MESSAGE key in any resource bundle known to Faces.

Installation

Create a /META-INF/validation.xml file in WAR with the following contents:

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
    xmlns="https://jakarta.ee/xml/ns/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/validation/configuration https://jakarta.ee/xml/ns/validation/validation-configuration-3.0.xsd"
    version="3.0"
>
    <message-interpolator>org.omnifaces.validator.JsfLabelMessageInterpolator</message-interpolator>
</validation-config>

Usage

As an example, the customization of @Size in ValidationMessages.properties:

jakarta.validation.constraints.Size.message = The size of {jsf.label} must be between {min} and {max} characters
Demo

Enter more than 2 resp. 3 characters in the input fields below and press submit to trigger a validation error. Note how the field's label appears in the message, which originates from ValidationMessages.properties.

Demo source code
<p>
    Enter more than 2 resp. 3 characters in the input fields below and press submit to trigger 
    a validation error. Note how the field's label appears in the message, which originates from
    <code>ValidationMessages.properties</code>.
</p>

<h:form>
    <h:messages />
    
    <h:panelGrid columns="2">
        <o:outputLabel for="foo" value="Foo" />
        <h:inputText id="foo" value="#{validateConstraintsBean.constrainedEntity.foo}" />

        <o:outputLabel for="bar" value="Bar" />
        <h:inputText id="bar" value="#{validateConstraintsBean.constrainedEntity.bar}" />
        
        <h:commandButton value="submit">
            <f:ajax execute="@form" render="@form" />
        </h:commandButton>
        
    </h:panelGrid>
    
</h:form>