当面对在JSF2应用程序中验证属性的问题时,有两种主要方法。
使用Annotation定义ManagedBean上的验证
@ManagedBean
public class MyBean {
@Size(max=8)
private String s;
// Getters setters and other stuff.
}
或在jsf页面上声明:
<h:inputText value="#{myBean.s}">
<f:validateLength maximum="8"/>
</h:inputText>
碰巧我无法决定他们中的任何一个。第一个很好,因为它从jsf页面中删除了一些代码(这总是好的,因为这些页面根据定义并不友好)但是在查看jsf文件时更难以“一目了然”看到页面发生了什么
您认为哪一个更清楚?更好?更好?
答案 0 :(得分:16)
我会在ManagedBean上进行验证,这会从模型视图Controller中的JSF VIEW中删除逻辑。并且应该让JSF负责显示模型。 此外,在托管bean上具有此功能可确保在何处更新验证。这更干涩(不要重复自己)。
答案 1 :(得分:3)
managedBean方法还有另一个优点。如果JSF显示的信息也可以通过Web服务(WS)获得,则可以将实际验证代码分解为验证类,并用于JSF和WS,以确保系统中的所有信息都有效。
答案 2 :(得分:2)
Richfaces允许您一起使用它们。请参阅<rich:graphValidator>
(以及beanValidator
)。
这些标签说:“基于javax.validation
(或Hibernate验证器)规则应用JSF验证”。
答案 3 :(得分:1)
@ user1730904,您可以在资源包文件中定义消息,如Bean Validation规范文档中所述。所需的步骤很简单:
ValidationMessages_xx_XX.properties
的文件(例如src/main/resources/
)。 xx_XX
为es_ES
,en_US
等的位置。内容可以是:
field.message=The number of digits must be less or equal than {max}.
@Size(max = 20, message="{field.message}")
答案 4 :(得分:-1)
我可能更喜欢JSF验证,因为我无法提供资源包错误消息作为bean验证的一部分。例如,你不能这样做
@NotNull(message = ResourceBundleHelper.getString("error_message"))
因为&#34;编译常量只能是原语和字符串&#34;。有定义常量消息的工作,但这看起来很难看。