jsf inputText和validateRegexPatter

Rob*_*tis 5 validation message placeholder jsf-2

我想在消息中显示label属性:

    <h:inputText id="email" label="#{sW.email}" value="#{contattiBean.contatto.email}"
                                 required="true">
              <f:param value="#{sW.email}" />
              <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/>
    </h:inputText>
Run Code Online (Sandbox Code Playgroud)

我已经设置了f:param,因为在

`javax.faces.validator.RegexValidator.NOT_MATCHED={0}: Valore non valido`
Run Code Online (Sandbox Code Playgroud)

{0}被正则表达式模式替换.同时,我要显示标签值.我的解决方案不起作用我该怎么办?

vic*_*era 6

我想你正在使用Mojarra,因为检查javax.faces.validator.RegexValidator的来源我注意到验证消息的参数只是模式,标签永远不会传递给消息格式化程序,你不能在你的拥有自定义消息.

//From javax.faces.validator.RegexValidator source
if (!matcher.matches()) {
   Object[] params = { regex }; 
   fmsg = MessageFactory.getMessage(locale, NOT_MATCHED_MESSAGE_ID, params);
   throw new ValidatorException(fmsg);
}
Run Code Online (Sandbox Code Playgroud)

在MyFaces的消息来源中,似乎它们确实传递了模式和标签.

至少有两个简单的选项:使用MyFaces或更好地使用输入组件的validatorMessage属性.

validatorMessage description是一个ValueExpression启用的属性,如果存在,将用作验证程序消息的文本,替换来自验证程序的任何消息.

 <h:inputText id="email" label="#{sW.email}" 
         value="#{contattiBean.contatto.email}"
         required="true" validatorMessage="#{sW.email} is not valid">
          <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/>
 </h:inputText>
Run Code Online (Sandbox Code Playgroud)