当提交的输入值为null时,不会调用JSF自定义验证器



我创建了一个自定义验证器,当输入为null时,它不会被调用。

我的验证码:

@FacesValidator("requiredValidator")
public class RequredValidation implements Validator {
    public void validate(FacesContext context, UIComponent component,
            Object value) throws ValidatorException {
        System.out.println("in valid GGGGGGGG");
    }

我的xhtml页面代码:

<p:message for="urlInput"  />
<p:inputText id="urlInputv" value="#{coverageBean.firstname}" label="URL" maxlength="2" >
    <f:validator validatorId="requiredValidator"></f:validator>
</p:inputText>
<p:message for="urlInputv"  />
<p:commandButton value="submit" action="#{loginBean.validateText}" />

现在,当我在文本框中输入任何值时,这是有效的,但当inputtext为null时,它就不起作用了。

服务器正在使用

  • Tomcat
  • 素数面3.5
  • jsf2.0

有人能告诉我问题出在哪里吗?

默认情况下,如果Bean验证(JSR303)在环境中不可用,JSF不会验证空的提交值。这种行为可以通过上下文参数javax.faces.VALIDATE_EMPTY_FIELDS来控制。

javax.faces.VALIDATE_EMPTY_FIELDS的默认值是auto,这意味着如果类路径中存在Bean Validation(JSR303),则会验证空字段。

如果您想在没有Bean验证的情况下验证空字段,那么显式地将web.xml中的上下文参数设置为true,如下所示:

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>true</param-value>
</context-param>

必须指出的是,如果您想根据需要验证输入字段,通常会使用required="true"。那么您就不需要在自定义验证器中执行该工作了。

<p:inputText ... required="true" requiredMessage="Please enter value" />

或者,更抽象的<f:validateRequired>:

<p:inputText ... requiredMessage="Please enter value">
    <f:validateRequired />
</p:inputText>

请注意,您可以在同一个输入组件上安全地使用多个验证器。

你有没有试着放:

<p:inputText id="urlInputv" required="true"
....

required true用于避免用户使用null值。如果你不想有一个必需的输入,那么初始化你的值:

firstname = ""; //or a default value

相关内容

  • 没有找到相关文章

最新更新