我有一个简单的JSF RichFaces表单,其中包含一些字段,显然是一个支持bean来存储它们 . 在那个bean中,所有必需的属性都有验证注释(jsr303 / hibernate),但我似乎无法找到一个注释来检查属性(String)是否为空 . 我知道spring模块中有@NotBlank注释,但JSF不支持spring验证 . 有没有简单的方法来检查它,还是我应该编写自己的注释?
@Edit:我已经尝试过来自jsr303和hibernate的@NotNull和@NotEmpty,但是他们都失败了我仍然可以发送一个像“”这样的空白字符串 .
3 回答
如果你使用Hibernate Validator 4.1作为你的JSR-303实现,那么它们提供了一个@NotBlank注释,它完全可以完成你正在寻找的东西,与@NotNull和@NotEmpty分开 . 您需要使用(当前)最新版本,但这将有效 .
如果由于某种原因无法使用最新版本,那么自己编写注释并不需要太多 .
Hibernate Validator 4.1提供了一个自定义的仅字符串@NotBlank注释,它在修剪空格后检查非空而不是空 .
@NotBlank
的api文档指出:如果不清楚
@NotEmpty
在检查之前修剪字符串,请首先查看表'built-in constaints'下4.1文档中给出的描述:然后,浏览代码,您将看到
@NotBlank
是defined as:这个定义有两点需要注意 . 第一个是
@NotBlank
的定义包括@NotNull
,所以它是@NotNull
的扩展名 . 第二个是它通过使用带有NotBlankValidator.class的@Constraint
来扩展@NotNull
. 这个类有一个isValid
方法,它是:有趣的是,如果字符串为null,则此方法返回true,但是当且仅当修剪字符串的长度为0时才返回false . 如果它为null,则返回true,因为正如我所提到的,@ NotEmpty定义也需要@NotNull .
也许@NotEmpty?
其定义为:
由于你使用的是richfaces,我想你正在使用<rich:beanValidator />?它处理JSR 303注释 .
Update :尝试(取自here):