0

我正在使用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="" 表示的静态形式)?有没有相关的接口?

4

1 回答 1

0

为了获得最佳使用效果,我还通过JAVA SCRIPTJSF 实现了验证,

代码(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验证器更多参考使用链接

于 2013-07-03T13:44:38.137 回答