【问题标题】:Custom validator in Primefaces 3.5 for input textPrimefaces 3.5 中用于输入文本的自定义验证器
【发布时间】:2014-06-04 10:17:15
【问题描述】:

我的文本框的 html/jsf 代码是:

<p:inputText id="trainingNo" value="#{cpeTrainingMB.cpeTrainingObj.trainingNo}"
                                required="true" requiredMessage="Please Enter Training Number" binding="#{trainingNoComponent}">
                                <f:validator validatorId="trainingNoValidator"/>
                                <f:attribute name="trainingNoComponent" value="#{trainingNoComponent}"/>
                                </p:inputText>

我的验证器类是:

@FacesValidator("trainingNoValidator")
public class TrainingNoValidator implements Validator{

    @Override
     public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        if (value == null) {
            return;
        }

        UIInput trainingNoComponent = (UIInput) component.getAttributes().get("trainingNoComponent");

        if (!trainingNoComponent.isValid()) {
            return;
        }

        Integer trainingNumber = (Integer) trainingNoComponent.getValue();
        System.err.println(trainingNumber);

        if (trainingNumber < 1) {
            return;
        }

        if (Integer.valueOf(DirectSqlUtils.
                getSingleValueFromTable("SELECT ISNULL((SELECT ISNULL(training_no, 0) FROM [dbo].[cpe_training] "
                        + "WHERE training_no = '"+trainingNumber+"'), 0)")
                .toString()) != 0) {
            System.err.println("Hello : "+DirectSqlUtils.
                getSingleValueFromTable("SELECT ISNULL((SELECT ISNULL(training_no, 0) FROM [dbo].[cpe_training] "
                        + "WHERE training_no = '"+trainingNumber+"'), 0)")
                .toString());
            trainingNoComponent.setValid(false);
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,"Training Number invalid.",null));

        }
    }

}

问题是当我将 UI 中的文本设置为 1,2 或 3 等时;来自事件的对象总是返回 0(零)而不是插入的文本。所以验证不能正常工作。我是 JSF 的新手。

【问题讨论】:

  • 可能验证工作正常。我认为你应该调试你的大 if 条件(第三个)。

标签: jsf jsf-2 primefaces


【解决方案1】:

您应该使用UIComponent#getSubmittedValue()getValue() 假定组件已通过验证和转换。

getSubmittedValue 应在验证完成之前使用

返回此 UIInput 组件的提交值值。该方法只能用于该组件的 decode() 和 validate() 方法,或其对应的 Renderer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多