JSF 可以验证输入值。谁能说 JSF 在哪里验证..?
3 回答
服务器总是和客户端有时。
客户端可以使用 HTML/Javascript 作为可用性增强来验证某些类型的输入。但是,当客户端将信息发回服务器时,该输入和所有其他输入将始终在服务器上进行验证。
我认为这两个答案都有点不清楚,因此我想总结一下:
1.)JSF,总是在服务器端执行验证!JSF 中的验证是 JSF 组件生命周期的一部分。当您提交一些数据时,就会触发生命周期。我不想详细介绍,但生命周期会贯穿各个阶段(恢复组件、触发转换、验证转换后的值、执行 actionlisteners 和操作、呈现响应)
2.) 感觉就像客户端验证的验证是在 JSF 中使用 ajax 支持时进行的。这个方法的作用是它只请求执行一些 html 字段。JSF 执行与普通请求相同的生命周期。不同之处在于它只转换和验证您指定的组件,并且只为您指定的组件呈现输出。因此,JSF 中支持 ajax 的验证也是在服务器端执行的!
3.) 我不同意第三方库提供客户端验证。
Primefaces集成了 jQuery UI,但它仍然使用 ajax 方法来验证数据。您可以编写自己的 jQuery JS 来验证某些字段,但我不会这样做。编写和管理重复的验证逻辑很痛苦。
Richfaces提供部分客户端验证。它为一些 JSR 303 和 JSF 验证器提供 JS 实现。因此,提供了真正的客户端 JS 验证,但仅针对存在 JS 实现的验证器。见:http ://planet.jboss.org/post/richfaces_4_client_side_validation
作为 Primefaces 克隆的Ice faces不提供客户端验证。
正如@Mike Q 的后续,JSF 可以在客户端或服务器端进行验证。但是,JSF 生命周期(发生在服务器端)中内置了一个验证阶段。组件可能没有服务器端验证,但不建议这样做。所有标准组件都提供服务器端验证。
JSF 组件还可以提供客户端验证。许多第三方 JSF 组件库(PrimeFaces、RichFaces等)都提供此功能。