Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JSF动态表单中添加并实现自定义验证器_Java_Jsf_Jsf 2_Primefaces - Fatal编程技术网

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