【问题标题】:Primefaces inputMask server side validationPrimefaces inputMask 服务器端验证
【发布时间】:2015-05-26 16:14:59
【问题描述】:

使用组件时,我们指定如何使用requiredmaxlengthvalidator 对其进行验证,并且这些验证在服务器上强制执行,这非常棒。

当使用 Primefaces inputMask 我们可以指定一个掩码。掩码使我们认为用户输入将始终与此掩码匹配。不幸的是,情况并非如此,我们必须编写validator 以确保用户输入将是我们想要的方式。因此,除非我遗漏了什么,inputMask 的“仅限客户端”行为足以为用户提供有关如何填写字段的提示。

是否有一个通用validator 可以与p:inputMask 配对以确保用户输入确实与掩码匹配?

【问题讨论】:

    标签: validation jsf primefaces server-side input-mask


    【解决方案1】:

    PrimeFaces 不提供开箱即用的功能。

    然而,使用字符数组上的简单 for 循环将掩码模式转换为正则表达式模式应该是相对简单的。然后,您可以使用此正则表达式模式来验证该值。

    例如

    <p:inputMask ... validator="maskValidator">
    

    @FacesValidator("maskValidator")
    public class MaskValidator implements Validator {
    
        @Override
        public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
            String submittedValue = context.getExternalContext().getRequestParameterMap().get(component.getClientId(context));
    
            if (submittedValue == null || submittedValue.isEmpty()) {
                return; // Let @NotNull / required="true" handle.
            }
    
            InputMask input = (InputMask) component;
            String mask = input.getMask();
            StringBuilder regex = new StringBuilder();
    
            for (char c : mask.toCharArray()) {
                switch (c) {
                    case 'a': regex.append("[a-zA-Z]"); break;
                    case '9': regex.append("[0-9]"); break;
                    case '?': case '+': case '*': regex.append(c); break;
                    default: regex.append(Pattern.quote(Character.toString(c))); break;
                }
            }
    
            if (!submittedValue.matches(regex.toString())) {
                throw new ValidatorException(new FacesMessage(submittedValue + " does not match " + mask));
            }
        }
    }
    

    请注意,验证器使用未转换的提交值,而不是传入的第三个参数,它可能预先(隐式)转换,因此可能具有不同的toString() 表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多