To have a single parameterized message serving all your fields requiredMessage attribute, or any other jsf messages, you need to have dynamic parameters in your jsf message, by creating a custom facelets taglib function.

Place functions.taglib.xml file in your WEB-INF, next to web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
<facelet-taglib xmlns="">
			java.lang.String formatMessage(java.lang.String, java.util.Locale, java.lang.String)

and in your project.

package net.myproject.view.util;

import java.util.Locale;

public class JSFFunctions {
    public static String formatMessage(String key, Locale locale, String paramsCombined) {
        Object[] params = paramsCombined.split(",");
        return FacesMessageUtil.getString(key, locale, params);

functions.taglib.xml is a reflection to all the static methods in JSFFunctions and will be the link between your jsf pages and this class.
Each method is represented with a <function> tag:
<function-name> holds the static method name
<function-class> holds the class full qualified name, containing that method
<function-signature> holds the declaration of a static method, notice the full qualified names of all parameters and return datatype.

To have your new taglib functions loaded to facelets libraries add this <context-param> to your web.xml:


Now in your jsf page, you can use the namespace defined in <namespace> tag:

<ui:composition xmlns=""

and later on through your page:

<h:inputText ... required="true" 
    requiredMessage="#{fnc:formatMessage('msg.required', myBean.currentLocale, uir[''])}" />

When this expression is evaluated, uir[''] is evaluated first, then passes its value to formatMessage method in JSFFunctions which takes the message parameters as a comma separated String, because facelets taglib functions don’t support Varargs.
FacesMessageUtil.getString handles getting the appropriate message from your .properties file, which in my case should be having these values:
msg.required={0} value required.

Facelets taglib functions are always handy when you need a value to be evaluated directly in a jsf el expression.