【问题标题】:Showing label in custom validator在自定义验证器中显示标签
【发布时间】:2011-09-18 06:24:27
【问题描述】:

我创建了一个实现自定义验证器的新自定义组件。 我是这样称呼它的:

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

这是验证实现

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

if (!val.matches(getExpression())) {
    throw new ValidatorException(new 
              FacesMessage(FacesMessage.SEVERITY_ERROR,getErrorSummary(),null));

以及属性文件中的错误信息:

the.error.message={0}\: is Invalid.

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

{0}: is Invalid.

有什么解决办法吗?

【问题讨论】:

    标签: validation jsf jsf-2 primefaces


    【解决方案1】:

    您需要使用MessageFormat API,就像 JSF 在幕后所做的那样。

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

    【讨论】:

      【解决方案2】:

      您为什么期待不同的行为?在发布的代码中,我看不到您在错误消息的 {0} 子字符串上明确地进行令牌替换。

      我通常会这样做:

      String messageBody = stringBuffer.toString().replaceAll("\\{0\\}", firstName);
      

      或者您的字符串可以使用正确的语法来替换字符串标记,以便在字符串的格式方法中使用:

      String.format("%s: is Invalid.", "token");
      

      【讨论】:

        猜你喜欢
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多