【问题标题】:Isn't validation process working on the server-side in Struts 2?验证过程不是在 Struts 2 的服务器端工作吗?
【发布时间】:2021-04-07 13:55:00
【问题描述】:

我对 Struts 中的验证概念感到困惑。 ActionSupport 类提供了validation() 方法

public void validate(){}

用于验证表单。但是这个过程不是在服务器端工作吗?

如果是的话,是否不符合验证的概念?

【问题讨论】:

  • 验证的概念失败?需要详细说明吗?
  • 我认为您需要先了解客户端和服务器端验证。
  • 您应该更具体地了解您的要求。

标签: validation struts2 server-side concept


【解决方案1】:

问题不清楚。

是的,一个动作的validate() 方法显然在服务器端验证。

这是一件好事,因为数据必须在服务器端进行验证,无论是否发生任何客户端验证。考虑 (a) 禁用 JavaScript 的用户,以及 (b) 不是通过浏览器发出的手工请求。虽然 (a) 越来越 不常见,(b) 是一种合法的危险。

你不能依赖 JS-only 验证。

【讨论】:

  • 此方法仅适用于programmatic验证开启(默认为true)。
  • 这意味着我们必须在客户端和服务器端验证表单
  • @Subodh 不,它没有,但总的来说,如果你这样做,它是一个更好的用户体验。但是您不能跳过服务器端验证。
  • @RomanC Ajax 请求与其他请求一样;他们仍然需要验证,IMO。 YMMV。
  • @RomanC 有什么理由不验证 Web 请求的数据?数据就是数据;它如何进入系统并不重要。如果您有一个像社会保险号这样的字段,它应该遵守特定的格式或模式,无论它是作为发布的表单字段还是在 Ajax 请求中,它仍然需要遵守该格式或模式。一旦它到达您的服务器,您就不能只说“哦,它一定没问题,因为它来自 Ajax 请求”,因为任何人都可以发送 Ajax 请求,如果他们正在使用您的应用程序。
【解决方案2】:

这个过程不是在服务器端工作吗?

当然,它是服务器端的validation。默认情况下,Struts 2 被配置为使用 programmatic 验证,而不管 declarative 方式。

两者都是服务器端,Struts2 也有一个使用 JavaScript 的客户端验证。 如果您同时使用验证,这是正确的 客户端和服务器端

如果您的操作类扩展 ActionSupport,您可以覆盖 validate() 方法以与框架使用的编程验证方法一起使用。在方法主体中,您可以实现自定义逻辑来验证字段。

validate() 方法由validation interceptor 调用,它是默认拦截器堆栈defaultStack 的一部分。

操作应提供INPUT 结果以返回操作错误或字段错误。

有关使用validation interceptor 进行程序验证的更多信息,您可以在此链接中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2018-03-08
    • 2023-03-28
    相关资源
    最近更新 更多