【问题标题】:Where does JSF validate the input values? Back-End or Front-end?JSF 在哪里验证输入值?后端还是前端?
【发布时间】:2012-04-24 12:31:09
【问题描述】:

JSF 可以验证输入值。谁能说出 JSF 在哪里验证..?

【问题讨论】:

标签: java jsf jsf-2


【解决方案1】:

我觉得这两个答案都有点不清楚,所以我想总结一下:

1.) JSF,总是在服务器端执行验证! JSF 中的验证是 JSF 组件生命周期的一部分。当您提交一些数据时,就会触发生命周期。我不想详细介绍,但生命周期会贯穿各个阶段(恢复组件、触发转换、验证转换后的值、执行 actionlistener 和操作、呈现响应)

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 克隆不提供客户端验证。

【讨论】:

    【解决方案2】:

    始终是服务器,有时是客户端。

    客户端可以使用 HTML/Javascript 验证某些类型的输入以增强可用性。但是,当客户端将信息发回服务器时,该输入和所有其他输入将始终在服务器上得到验证。

    【讨论】:

      【解决方案3】:

      作为@Mike Q 的后续,JSF 可以在客户端或服务器端进行验证。但是,JSF 生命周期(发生在服务器端)中内置了一个验证阶段。组件可能没有服务器端验证,但不建议这样做。所有标准组件都提供服务器端验证。

      JSF 组件还可以提供客户端验证。许多第三方 JSF 组件库(PrimeFacesRichFaces、...)都提供此功能。

      【讨论】:

      • JSF 组件库中的“客户端”验证通常不仅仅是由 ajax 执行的服务器端验证,它模拟了非常快速的“客户端”体验。
      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2016-09-26
      相关资源
      最近更新 更多