愚蠢的问题,但那是我的情况。我有可编辑的PrimeFaces selectOneMenu
,其中inputField
有以下限制:
一切都很好,除了最后一个有十进制数限制。这意味着我无法键入1.111
,只能1.11
。 keyUp
的更改事件selectOneMenu
遗憾地添加到标记选择中,但不会输入。
任何想法如何解决?
答案 0 :(得分:2)
这需要自定义验证器。创建一个检查预定义值的,如果未找到匹配项,请检查数字格式。基本示例:
@FacesValidator("myValidator")
public class MyValidator implements Validator
{
private List<String> predefinedValues = Arrays.asList("my", "list");
@Override
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
String valueStr = (String) value;
// Check if value is predefined
if (predefinedValues.contains(valueStr)) {
return;
}
// If not predefined, check number format
if (! valueStr.matches("^\\d+(\\.\\d\\d?)?$")) {
throw new ValidatorException(new FacesMessage("Value is invalid!"));
}
// Check number limits...
}
}
验证器可以在您的XHTML中用作:
<p:selectOneMenu editable="true" ...>
...
<f:validator validatorId="myValidator" />
</p:selectOneMenu>
作为替代方案,您可以使用jQuery查找输入字段并将keypress
侦听器绑定到它。例如,请参阅:Jquery: filter input on keypress。但是,我会保留验证器。例如,用户可以粘贴文本。
另见: