我创建了一个自定义验证器,当输入为空时,它不会被调用。
我的验证码:
@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时它不起作用。
服务器正在使用
请问有人能说出问题所在吗?
答案 0 :(得分:15)
默认情况下,如果Bean Validation(JSR303)在环境中不可用,则JSF不会验证空的提交值。可以使用上下文参数javax.faces.VALIDATE_EMPTY_FIELDS
控制此行为。
javax.faces.VALIDATE_EMPTY_FIELDS
的默认值为auto
,这意味着如果类路径中有Bean验证(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>
请注意,您可以在同一个输入组件上安全地使用多个验证器。
答案 1 :(得分:0)
您是否尝试过:
<p:inputText id="urlInputv" required="true"
....
required true用于避免用户使用null值。 如果您不想要输入,请初始化您的值:
firstname = ""; //or a default value