为JSF动态表单添加并实现自定义验证器

时间:2013-07-03 13:33:02

标签: 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.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);
...

我想添加&动态地为inputText字段实现数字验证器。我不知道如何实施?

例如,如果我尝试使用正则表达式进行验证,我如何动态地添加相关组件(例如,以f:validateRegex pattern =“”表示的静态表单)?有没有相关的界面?

1 个答案:

答案 0 :(得分:0)

为了最好的使用,我还通过JSF中的JAVA SCRIPT实现了验证,

代码(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验证)

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

JAVA验证器更多参考使用link