Согласно примеру кода в вашем обновленном вопросе, вы, похоже, вообще не делегируете валидатор правильному вводу, поэтому валидатор просто полностью игнорируется.
Вам необходимо определить желаемый ввод (для которого вы хотите присоединить валидатор) как <composite:editableValueHolder>
в <composite:interface>
.
<cc:interface>
<cc:editableValueHolder name="forName" targets="inputId" />
...
</cc:interface>
<cc:implementation>
...
<h:inputText id="inputId" ... />
...
</cc:implementation>
Выше <composite:editableValueHolder>
в основном говорит, что любой <f:validator for="forName">
долженнаноситься на <h:inputText id="inputId">
.Таким образом, следующее должно сделать это:
<cc:myComp>
<f:validator id="myValidator" for="forName" />
</cc:myComp>
Вы можете даже использовать одно и то же значение в name
и targets
, но ключевой момент заключается в том, что должен присутствовать <composite:editableValueHolder>
, чтобыJSF знает, на какой именно компонент ввода должен быть нацелен валидатор, а в композите может быть несколько компонентов ввода, видите ли.