JSF / Hibernate NotBlankvalidation

我有一个简单的JSF + RichFaces表单,有一些字段,显然是一个支持bean来存储它们。 在那个bean中,所有必需的属性都有validation注释(jsr303 / hibernate),但我似乎无法找到一个注释来检查属性(String)是否为空。 我知道spring模块中有@NotBlank注释,但JSF不支持springvalidation。 有没有简单的方法来检查它,还是我应该编写自己的注释?

@Edit:我已经尝试过来自jsr303和hibernate的@NotNull和@NotEmpty,但是他们都失败了我仍然可以发送一个像“”这样的空白字符串。

如果你使用Hibernate Validator 4.1作为你的JSR-303实现,它们会提供一个@NotBlank注释,它完全可以完成你正在寻找的东西,与@NotNull和@NotEmpty分开。 您需要使用(当前)最新版本,但这将有效。

如果由于某种原因无法使用最新版本,那么自己编写注释并不需要太多。

Hibernate Validator 4.1+提供了一个自定义的仅字符串@NotBlank注释,它在修剪空格后检查非空而不是空。 @NotBlank的api文档声明:

与NotEmpty的区别在于尾随空格被忽略。

如果不清楚@NotEmpty是否在检查之前修剪字符串,请首先在“内置constaints”表下看到4.1文档中给出的描述:

检查带注释的字符串是否为空且修剪长度是否大于0.与@NotEmpty的区别在于此约束只能应用于字符串并且会忽略尾随空格。

然后,浏览代码,您将看到@NotBlank被定义为 :

 @Documented @Constraint(validatedBy=NotBlankValidator.class) @Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER}) @Retention(value=RUNTIME) @NotNull public @interface NotBlank{ /* ommited */ } 

这个定义有两点需要注意。 第一个是@NotBlank的定义包括@NotNull ,所以它是@NotNull的扩展。 第二个是它通过使用带有@Constraint的@Constraint来扩展@NotNull 。 这个类有一个isValid方法,它是:

 public boolean isValid(CharSequence charSequence, ConstraintValidatorContext constraintValidatorContext) { if ( charSequence == null ) { //this is curious return true; } return charSequence.toString().trim().length() > 0; //dat trim } 

有趣的是,如果字符串为null,则此方法返回true,但是当且仅当修剪字符串的长度为0时才返回false。如果它为null,则返回true,因为正如我所提到的,@ NotEmpty定义也需要@NotNull 。

也许@NotEmpty

其定义为:

 @NotNull @Size(min=1) 

既然你使用的是richfaces,我想你正在使用 ? 它处理JSR 303注释。

更新 :尝试(取自此处 ):

 @Pattern(regex="(?!^[\s]*$)").