Primefaces输入掩码只接受十六进制。

5
我在将PrimeFaces从6.2.5更新至7.0.4时遇到了一个严重的问题。之前我使用的是以下方式的inputMask
<p:inputMask id="input" value="#{bean.inputs.id}" mask="^^ ^^ ^^ ^^ ^^"
             requiredMessage="#{label.lblRequired}" >
    <f:validator validatorId="Validator"/>
</p:inputMask>

还有一个 JavaScript 部分,我在其中定义了 "^" 的用法。

$.mask.definitions['^'] = '[A-Fa-f0-9]';

使用PrimeFaces 7.0.4后,我无法再使用这种模式,如您可以在此提交中看到: 链接到primefaces 的 Github

另外,如果我使用这种方法,虽然将值填充在网页上,但是值仍然为空,我的问题是是否有其他方法可以添加正则表达式到输入的每个字段中?或者有任何模式我可能需要了解?

我尝试过的方法:

  1. 添加 <f:validateRegex pattern="[regex]"/> --> 没有效果
  2. 添加 <p:keyFilter regEx="[regex]" /> --> 只在inputText上起作用
  3. 为每个 "^" 添加正则表达式 --> 无效

2
你如何确定特定的GitHub提交导致了问题。如果它之前正常工作现在出现了问题,为什么不在PrimeFaces Github Issues页面上提交一个问题呢? - Melloware
@Melloware 因为可能不是一个错误,而是一个特性,我不知道如何正确使用掩码模式。为了确保我在问答平台上寻求建议,也许有人遇到了相同的问题。这就是stackoverflow的用途;) - Mofty
如果某些东西是凭运气工作的,而不应该这样,或者它按照预期工作但现在不再工作,这两种情况都是在PrimeFaces问题列表中发布问题的有效原因。 - Kukeltje
@Mofty,请检查一下这里是否有影响输入掩码的内容:https://github.com/primefaces/primefaces/wiki/Migration-Guide - BugsForBreakfast
id="input" 看起来含糊不清。在可能的情况下,应避免使用 id 属性,并且不要将所有事物都“超标识”,因为 id 正在被 JSF/PF 引擎内部用于构建组件树。过度使用它可能会导致您无法自己解释的错误,直到您删除所有不需要的 id 属性。小心! - Roland
1个回答

5
您说得对,这是由于PrimeFaces 7.0中的安全修复导致的问题: https://github.com/primefaces/primefaces/issues/3234 在该线程中,开发人员对修补此安全漏洞的评论。

jquery.maskedinput允许您定义自己的规则,即掩码定义,例如~可以被定义为映射到+或-。来自https://github.com/digitalBush/jquery.maskedinput的示例。

jQuery(function($){    
   $.mask.definitions['~']='[+-]';   
   $("#eyescript").mask("~9.99 ~9.99 999"); 
}); 

然而,PrimeFaces 似乎没有实现这个功能。因此,在我的提交中忽略了它。

所以看起来你应该在那个 bug 票上发表评论,说明它导致了回归问题。

更新于 2019 年 9 月 2 日:PF 7.0.8 和 7.1 已经修复了这个问题:https://github.com/primefaces/primefaces/issues/5105


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接