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

use*_*365 11 validation jsf jsf-2

我创建了一个自定义验证器,当输入为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");

    }
Run Code Online (Sandbox Code Playgroud)

我的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}" />
Run Code Online (Sandbox Code Playgroud)

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

服务器正在使用

  • Tomcat的
  • 主要3.5
  • JSF2.0

请问有谁能说出问题所在?

Mic*_*chi 16

默认情况下,如果Bean Validation(JSR303)在环境中不可用,则JSF不会验证空的提交值.可以使用context参数控制此行为javax.faces.VALIDATE_EMPTY_FIELDS.

javax.faces.VALIDATE_EMPTY_FIELDSis 的默认值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>
Run Code Online (Sandbox Code Playgroud)

必须required="true"要说的是,如果您想根据需要验证输入字段,通常会使用它.您不需要在自定义验证器中执行该作业.

<p:inputText ... required="true" requiredMessage="Please enter value" />
Run Code Online (Sandbox Code Playgroud)

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

<p:inputText ... requiredMessage="Please enter value">
    <f:validateRequired />
</p:inputText>
Run Code Online (Sandbox Code Playgroud)

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


小智 0

你是否尝试过:

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

....
Run Code Online (Sandbox Code Playgroud)

required true 用于避免用户使用 null 值。如果您不想有必需的输入,请初始化您的值:

firstname = ""; //or a default value
Run Code Online (Sandbox Code Playgroud)