Java 在JSF动态表单中添加并实现自定义验证器
我正在使用Java 在JSF动态表单中添加并实现自定义验证器,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,我正在使用javax.faces.component动态构建JSF表单,比如: ... } else if ((formFields.get(i).getFieldType().equals("Numeric"))) { HtmlInputText input = (HtmlInputText)application.createComponent(HtmlInputText.COMPONENT_TYPE); input.setId("G000"+i); input.se
javax.faces.component
动态构建JSF表单,比如:
...
} else if ((formFields.get(i).getFieldType().equals("Numeric"))) {
HtmlInputText input = (HtmlInputText)application.createComponent(HtmlInputText.COMPONENT_TYPE);
input.setId("G000"+i);
input.setValueExpression("value", FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createValueExpression(FacesContext.getCurrentInstance().getELContext(), "#{reviewReportBean.cRReviewerFormDataList["+i+"].fieldData}" , String.class));
input.setDisabled(checkTaskStatus(taskId));
//input.addValidator(numericValidator);
dynamicPanelGrid.getChildren().add(input);
...
我想添加并实现一个数字验证器来动态输入文本字段。我不知道如何实施
例如,如果我尝试使用正则表达式进行验证,如何动态添加相关组件(例如,以
f:validateRegex
pattern=“”)表示的静态形式)?是否有相关的接口?以获得最佳使用,我还通过JSF中的JAVA脚本
实现了验证
代码(JAVASCRIPT验证):
htmlInputTextObj.setMaxlength(8);
htmlInputTextObj.setOnkeypress("javascript:return limitinput(event, '0123456789', true);");
htmlInputTextObj.setOnfocus("javascript:return clearThisField(this);");
htmlInputTextObj.setOnblur("javascript:return loadDefaultValue(this);");
代码(JAVA验证)
JAVA validator更多参考使用但是使用javascript实现更复杂的验证器逻辑会更困难这是真的,但是在代码中添加验证就不那么复杂了。jubin感谢您的响应,我会检查!我认为我可以拥有的另一个选择是,我可以在inputText组件之后添加(如果支持的话)类型为“f:validateRegex”的组件。但是我找不到它是否受支持(javax.faces.*)这是它对应的类吗?regexvalidator是的,它们给出了JSF动态组件和验证器使用的示例
final LengthValidator validator =
(LengthValidator)getApplication().createValidator(LengthValidator.VALIDATOR_ID);
if (question.getMinLength() > 0)
validator.setMinimum(question.getMinLength());
if (question.getMaxLength() > 0)
validator.setMaximum(question.getMaxLength());
htmlInputText.addValidator(validator);