我有一个简单的JSF + RichFaces表单,其中包含一些字段,显然是一个支持bean来存储它们。在那个bean中,所有必需的属性都有验证注释(jsr303 / hibernate),但我似乎无法找到一个注释来检查属性(String)是否为空。我知道spring模块中有@NotBlank注释,但JSF不支持spring验证。有没有简单的方法来检查它,还是我应该编写自己的注释?
@Edit:我已经尝试过来自jsr303和hibernate的@NotNull和@NotEmpty,但是他们都失败了我仍然可以发送一个像“”这样的空白字符串。
答案 0 :(得分:9)
如果你使用Hibernate Validator 4.1作为你的JSR-303实现,它们提供了一个@NotBlank注释,它完全可以完成你正在寻找的东西,与@NotNull和@NotEmpty分开。您需要使用(当前)最新版本,但这将有效。
如果由于某种原因无法使用最新版本,那么自己编写注释并不需要花费太多时间。
答案 1 :(得分:1)
Hibernate Validator 4.1+提供了一个自定义的仅字符串@NotBlank
注释,用于在修剪空白后检查非空而不是空。 @NotBlank
州的api文档:
与NotEmpty的区别在于尾随空格被忽略。
如果不清楚@NotEmpty
在检查前修剪字符串,请先查看表格'built-in constaints'下4.1文档中的说明:
检查带注释的字符串是否为空并且修剪长度大于0.与@NotEmpty的区别在于此约束只能应用于字符串并且忽略尾随空格。
然后,浏览代码,您会看到@NotBlank
是defined as:
@Documented
@Constraint(validatedBy=NotBlankValidator.class)
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(value=RUNTIME)
@NotNull
public @interface NotBlank{
/* ommited */
}
此定义中有两点需要注意。第一个是@NotBlank
的定义包括@NotNull
,因此它是@NotNull
的扩展。第二个是它通过使用带有NotBlankValidator.class的@NotNull
来扩展@Constraint
。这个类有一个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,因为正如我所提到的,@ NotTmpty定义也是需要@NotNull。
答案 2 :(得分:0)
也许是@NotEmpty
?
定义为:
@NotNull
@Size(min=1)
由于您使用的是richfaces,我猜您使用的是<rich:beanValidator />
?它处理JSR 303注释。
更新:尝试(取自here):
@Pattern(regex="(?!^[\s]*$)").