在自定义验证器中显示标签

use*_*225 2 validation jsf primefaces jsf-2

我创建了一个实现自定义验证器的新自定义组件.以下是我称之为:

<p:inputText value="#{MyBean.value}" >
    <f:attribute name="label" value="#{ResourceBean.labels['label']}"/>

    <my:validator error="#{ResourceBean.message['the.error.message']}" 
                  expression="#{ResourceBean.regExp['alphanumeric']}"/>
</p:inputText>
Run Code Online (Sandbox Code Playgroud)

这是验证实现

String val = value == null ? "" : value.toString();

if (!val.matches(getExpression())) {
    throw new ValidatorException(new 
              FacesMessage(FacesMessage.SEVERITY_ERROR,getErrorSummary(),null));
Run Code Online (Sandbox Code Playgroud)

和属性文件中的错误消息:

the.error.message={0}\: is Invalid.
Run Code Online (Sandbox Code Playgroud)

问题是,{0}错误消息中的标签没有替换,因此我收到错误消息:

{0}: is Invalid.
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决它?

Bal*_*usC 5

您需要使用MessageFormatAPI,就像JSF在幕后一样.

String message = getErrorSummary();
String label = component.getAttributes().get("label");
String formattedMessage = MessageFormat.format(message, label);
throw new ValidatorException(new FacesException(formattedMessage));
Run Code Online (Sandbox Code Playgroud)