选择哪个Java Web框架用于客户端和服务器端验证?

3

我们正在寻找一种Java框架,它可以在服务器端和客户端都轻松地进行验证。Spring、Hibernate和Play是我们正在寻找的框架选择,我们使用基于注解的开发方式,这个框架也将决定我们JavaScript的选择。在客户端和服务器端的验证操作方面,哪个框架(从架构上)更好?

6个回答

5

新的Spring 3(目前处于RC2状态,很快就会完成)与Hibernate搭配使用时,有许多好处可以帮助你。在将用户输入绑定到模型后,通常需要验证模型。Spring 3提供了JSR-303声明式验证支持。如果类路径上存在JSR-303提供程序(如Hibernate Validator),则此支持会自动启用。启用后,您只需在控制器方法参数上注释@Valid注释即可触发验证:

@RequestMapping(value = "/appointments", method = RequestMethod.POST)
public String add(@Valid AppointmentForm form, BindingResult result) {
    ....
}

public class AppointmentForm {

    @NotNull @Future
    private Date date;
}

在绑定传入的POST参数之后,将验证AppointmentForm;在这种情况下,要验证日期字段值不为空并且发生在未来。
因此,这使得针对您的领域模型进行验证非常容易,并且您可以自由地在前端使用任何Javascript库,无论是Jquery还是Extjs等。我已经广泛地在Spring中使用了Extjs的小部件,没有任何灵活性上的缺失,我期望其他库(比如Jquery)也能做到同样的效果。还有一个名为Spring-js的工具,您可以了解其优点并根据您的用例进行评估。

你能提供更多细节吗?我创建了一个表单对象类,其中包含名称、邮件和文本字段,然后我创建了一个表单控制器来使用有效注释,但我不知道如何实现并将其与表单一起使用。 - Burak Dede
@Burak:你应该在这里找到所需的内容 http://static.springsource.org/spring/docs/3.0.0.RC2/spring-framework-reference/html/ch05s07.html - non sequitor

4
客户端验证(假设“客户端”是基于javascript的)是一个神话。它可以使UI更加美观,但不能被称为“验证”,因为来自客户端的任何内容都不能被认为是有效的;直到在服务器上进行验证才行。
服务器端验证也不是一个单一的部分 - 至少有3个组成部分:
1. 数据存储约束(例如:非空、最大长度、唯一性、引用完整性等...在数据库级别指定)。 2. 领域模型验证(确保实体有效) 3. 客户端输入验证(基于UI和API的验证,程度较小)
从#2中可以得出#1 - Hibernate Validatior 在这方面做得非常好,假设您正在使用Hibernate作为JPA提供程序。
从#3中还可以派生客户端检查。 如果您打算使用GWT,则使用Jeff推荐的GWT VF是一个很好的方法,因为它基于与Hibernate Validator相同的规范(JSR-303)。 如果您打算使用其他东西,则可以相对简单地编写代码,从注释或基于XML的验证规则生成必要的脚本片段。 我以前为ExtJS控件完成了这项工作。
最大的问题是将#2和#3桥接起来 - 同一域实体可能由UI中的许多不同视图表示,每个视图都有自己的验证规则; 所述验证规则可能取决于实体状态并动态更改等等... 据我所知,除非您的UI非常简单且1对1 CRUD类型,否则没有好的自动执行方式。

2

回答ChssPly76的问题,您可以直接在UI中使用已注释了Hibernate验证(或最新版本的javax.validation)的实体,在使用RichFaces时也会自动应用相同的验证规则。它有一个名为beanValidator的组件,可以读取前面提到的注释。

与GWT不同,RichFaces(和JSF)允许更多文档风格的Web页面,而不是应用程序风格。


1

0
你还可以寻找一个具有ajax特性的JSF组件库。然而,它们大多只进行服务器端验证,但使用ajax来实现。例如RichFaces(也包含在Seam中),PrimeFacesIceFaces

-2
我会说Spring框架是最好的。我们已经使用Spring-Hibernate组合一段时间了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接