2011-01-26 72 views
5

我想显示在消息中的标签属性:JSF的inputText和validateRegexPatter

<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> 

我已经设置好的所述F:PARAM因为在

`javax.faces.validator.RegexValidator.NOT_MATCHED={0}: Valore non valido` 

的与取代的{0}正则表达式模式。 虽然,我该如何显示标签值。 我的解决方案无法正常工作,我该怎么办?

回答

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); 
} 

在MyFaces源代码中,似乎它们传递了模式和标签。

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

验证器消息描述为启用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>