jsf表单验证

嗨,大家好!

尽管标题强调验证一词,但本文实际上是关于JSF生命周期的。 那是因为我相信,真正了解生命周期的最简单方法之一就是通过做出我们一直在做的事情:验证用户输入。

通常,了解所谓的JSF生命周期是使初级开发人员与众不同的地方,这些初级开发人员主要复制并粘贴他们在其面前看到的所有内容,而高级开发人员则可以在面对不常见的情况而不会损害代码质量的情况下“赞叹”它。 。

通常,当我面试某个声称拥有JSF经验并且似乎不了解生命周期的人时,我认为这是一个不好的信号:)

总览

如果您曾经读过一本关于JSF的书,那么您可能已经看过以下图片:

此图显示了生命周期中的所有阶段。 关于本文感兴趣的内容,其中三个对我们最有用: 流程验证更新模型值调用应用程序

让我们假设一个假设的应用程序在其中注册用户。 在其中,我们将询问用户的姓名和年龄:

为了“处理”上面的表单,我们可能需要两个工件:一个接受请求的Managed Bean和一个表示正在注册的Person的实体对象:

证实

直截了当地,让我们假设我们有一个要求说明“年龄”字段不能接收负值。 完全有道理,因为没有人可以拥有“ -32”岁。 (我们还假设使用javascript是没有问题的。在这样的简单验证中,javascript就可以了。但是请耐心等待这个。):)

然后,我们剩下两种主要方法来验证“年龄”字段:

  1. 在我们的Managed Bean类的“ save()”方法内部。 ( 建议使用)
  2. 使用JSF验证程序 。 (推荐的)

我坚持使用“不建议”和“推荐”这两个词来强调,在过程验证阶段之外验证用户输入不是犯罪。 我们经常面临无法实现“幸福之路”的情况。 犯罪是在做事的时候根本不知道发生了什么!

接下来是解释。

不像这样

我归类为“不推荐”的方法是在“ save()”方法所包含的逻辑中验证托管Bean中的“ age”字段。 当用户点击在“提交”,JSF生命周期踢,并调用“保存()”调用应用程序相法右(注意这是在处理验证阶段之后 ):

为了了解为什么这可能是不好的,我们需要了解在每个JSF生命周期阶段中发生的事情,并且还要记住Invoke Application阶段发生 Process ValidationUpdate Model Values之后 。 概括地说,这意味着仅在Person对象已经通过JSF生命周期更新了其“ age”属性之后才调用“ save()”方法:

查看上图,您可能已经注意到,当调用我们的“ save()”方法时,JSF生命周期已经在域类Person对象的“ age”属性中设置了不一致的值。 那是个问题吗?

是的,可能是。 由于我们的域类大多数时候都是由JPA管理的,因此,像这样的无效值可能最终会在没有我们意识到的情况下进入数据库。 根据我的个人经验,我得出的结论是,在使用“扩展的持久性上下文”(即跨越多个请求/响应周期的JPA上下文)时,此类错误更为常见。 如今,这通常是通过使用“对话上下文”来完成的,例如CDI中或在已故的JBoss Seam中。

现在我们在说

理想情况下,我们应该使用JSF Validator验证输入。 注意,这并不一定意味着仅为验证逻辑创建一个单独的类,而是意味着我们必须在正确的阶段流程验证)触发验证

  1. 我们可以创建一个带有@FacesValidator注释的验证器类。
  2. 或在我们的Managed Bean类中创建一个验证方法

就像我说的那样,无论如何进行验证,主要要注意的是在正确的阶段进行验证。 还有几种验证输入的方法,例如Bean Validation

就这样

希望你们喜欢。 评论和问题可以留在下面。 直到下一次!

翻译自: https://www.javacodegeeks.com/2015/03/jsf-validation-at-the-right-phase-understanding-the-life-cycle.html

jsf表单验证

jsf表单验证_JSF:在正确的阶段进行验证(了解生命周期)相关推荐

  1. jsf表单验证_JSF验证示例教程–验证器标签,定制验证器

    jsf表单验证 JSF validation model defines a set of standard classes for validating the UI components. The ...

  2. jsf表单验证_动态表单,JSF世界期待已久

    jsf表单验证 新的PrimeFaces扩展版本0.5.0带来了新的DynaForm组件. 通常,如果知道行/列的数量,元素的位置等,则可以通过h:panelGrid或p:panelGrid构建非常简 ...

  3. JSF:在正确的阶段进行验证(了解生命周期)

    嗨,大家好! 尽管标题强调验证一词,但本文实际上是关于JSF生命周期的. 那是因为我相信,真正了解生命周期的最简单方法之一就是通过做出我们一直在做的事情:验证用户输入. 总的来说,理解所谓的JSF生命 ...

  4. 软件测试作业1:正确理解原型方法对软件生命周期不同阶段的支持

    作业1 1.正确理解原型方法对软件生命周期不同阶段的支持,分别给出:辅助或代替分析阶段:辅助设计阶段:代替分析与设计阶段:代替分析.设计和实现阶段:代替全部开发阶段所对应的开发活动执行时间顺序. 答: ...

  5. web 表单自定义字段_带有自定义服务器字段验证的AJAX表单提交

    web 表单自定义字段 Overview 总览 This article presents a method for validating form data in a PHP script usin ...

  6. form表单的多种提交方式及提交前验证

    以下是本人总结处来的一些form的提交方式,网上还有别的提交方式,这里我总结了大小分为7类,其实就是三类的提交方式,若有哪里不对的,还请评论指出来,大家一起学习学习 1.无任何验证提交(最普通的提交) ...

  7. Vue2(五):收集表单数据、过滤器、自定义指令、Vue的生命周期

    Vue2学习笔记:第五章 一.收集表单数据 1.不同标签的value属性 2.v-model的三个修饰符 二.过滤器 1.什么是过滤器? 2.案例:过滤器格式化时间戳 三.自定义指令 1.内置指令 2 ...

  8. 【Step by Step】编写代码验证一个ASP.NET应用程序和页面的生命周期

    我们知道ASP.NET Page的生命周期实际上是ASP.NET Application的生命周期的一部分.这个周期经历了HTTP Module => HTTP Handler => AS ...

  9. 【HTML5网页期末作业】基于HTML+CSS+JS实现宠物网站,表单展示登录页面,带JS密码验证

最新文章

  1. 中科院DeepMind联手,用深度学习揭示大脑如何识别人脸|Nature子刊
  2. python 根据判断产生新列_pandas DataFrame 根据多列的值做判断,生成新的列值实例...
  3. sql array 数组基本用法(二)
  4. python循环输出00-59
  5. c++ map用法_Pandas数据处理三板斧——map、apply、applymap详解
  6. 深入理解Spark 2.1 Core (十):Shuffle Map 端的原理与源码分析
  7. AOP联盟通知类型和Spring编写代理半自动
  8. python打开xml文件报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xb7 in position 58: illegal multi
  9. linux如何更新数据包up,Linux更新(update/upgrade) 修改更新源
  10. php 去除 bom,PHP批量检测并去除文件BOM头信息代码参考
  11. jquery中css()与animate()
  12. 新零售场景下数字化营销运营管理方案
  13. sample函数—R语言
  14. 知识图谱论文读后感001
  15. 单片机c语言延时程序计算,单片机 计算延时子程序执行时间
  16. raid5硬盘插到计算机读取,【哭着写下这篇文章】win2008软raid5变成2个磁盘组的数据恢复...
  17. 乐高收割机器人_学习乐高机器人编程,孩子到底收获了什么?
  18. doc跟docx的区别
  19. Invoking “make cmake_check_build_system“ failed
  20. topcoder入门

热门文章

  1. P4655-[CEOI2017]Building Bridges【斜率优化dp,CDQ分治】
  2. jzoj3914-人品问题【树形dp】
  3. nssl1155-遨游【二分答案,SPFA】
  4. 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love max and multiply(转化)
  5. 【DP】I Will Like Matrix!
  6. 清明梦超能力者黄YY[树链剖分+扫描线,线段树合并]
  7. 2、JAVA开发环境的搭建
  8. Spring Boot之程序性能监控
  9. 汇编语言(二十四)之输出n行星号
  10. 《此生未完成》痛句摘抄(3)