j2ee项目实训struts框架技术——第5章struts框架actionform组件及应用第1部分内容摘要:
户在登陆表单中的用户名称和用户密码两个数据项目是否为空进行 数据验证和检查。 并将产生的错误信息保存到 ActionErrors 对象中以便能够在页面中显示输出错误提示信息。 因为 validate()方法会传回 ActionErrors 对象,而在 ActionErrors 中可以储存各个不同的 ActionError 对象所代表的错误信息,每一个 ActionError 对象与资源字符串文件中的“ key”相对应。 一旦 validate()方法返回 ActionErrors 对象时, ActionServlet 前端控制器组件就不会继续进行剩余的请求工作,而是根据在【例 53】中所示的 文件中 所设定的 action标签中的 input 属性指示的请求页面 URL 地址 而跳回到该页面中(本示例为 页面文件 )。 【例 53】 文件中 所设定的 action标签的代码片段示例 action path=/userLogin type= name=userLoginForm scope=request validate=true input=/ forward name=loginSuccess path=// /action 注意: 为了能够使用 validate()方法, action标签中的 validate 属性必须设定为 true,而 input属性也是必要的;当 validate()方法返回 ActionErrors 对象时,就会跳转到由 input 属性所设定的 URL 地址所代表的目标页面;而 ActionErrors 对象中所封装的错误信息,可以在页面中使用 html:errors/标签来显示输出。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 9/19 页 5)利用 Action 组件类完成“数据 逻辑 ”检查 的示例 而与具体业务逻辑功能相关的数据验证,如 两个用户的名称是否同名、某个数据项目是否存在等“数据逻辑”方面的检查则应该放入 Action 组件类中来检查 (因为 Action 代表对业务逻辑和流程的控制)。 【例 54】所示的代码示例中对用户请求的参数进行“数据逻辑”方面的检查,如果输入的参数值为“ badperson”则意味着错误,并产生出对应的错误提示信息(请注意其中的黑体部分的代码)。 【例 54】 在 Action 组件类中 对请求数据进行 检查 的示例 public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) throws , { ActionErrors errors = new ActionErrors()。 HelloForm helloForm = (HelloForm)form。 String person = ()。 if((“badperson”)) { (person, new ActionError(,badPerson))。 saveErrors(request,errors)。 return new ActionForward(())。 } //。 Action 组件类中的 其他的功能代码 ,在此省略 } 注意: 由于 Action 组件类中的 execute 方法的返回值并不是 ActionErrors 对象,因此必须将所产生的 ActionErrors 对象保存到 HttpServletRequest 对象中,在页面中才能够用 html:errors标签显示输出。 希望读者对比【例 51】和【例 54】在对 ActionErrors 对象的处理方式方面的不同点。 数据验证中的错误 信息包装和 处理技术 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 10/19 页 1) ActionError 和 ActionErrors 类 在 Struts 框架中对数据验证中的错误提供了两个不同的类进行包装 —— ActionError和 ActionErrors 类,其中的 ActionError 类封装单个错误消息,而 ActionErrors 是 ActionError 类的容器(集合),可以包装一批错误消息;并且 ActionErrors 和 ActionError类都是 ActionMessage 的子类, ActionError 存放在 ActionErrors 集合中。 2)创建 ActionError 对象 可以采用资源字符串文件中的“ key 名称”来创建一个 ActionError 对象,请见下面的代码示例。 然后再将该 ActionError 对象存储到 ActionErrors 容器组件对象中。 ActionError error = new ActionError(“ key)。 3)在 JSP 页面中可以使用 html:error获得错误信息并显示输出 html:errors 标签在 HttpServletRequest 和 HttpSession 范围内寻找ActionMessages 或者其子类 ActionErrors 集合对象,再从 ActionMessages 集合对象中读取 ActionMessage 对象,把 ActionMessage 对象包含的消息文本显示到具体的网页上。 html:errors标签能够格式化地显示 ActionMessage 对象所包含的错误消息文本,而这些消息的文本预先存放在资源字符串文件中。 如果在 html:errors标签中没有设置property 属性,将显示 ActionMessages 对象中所有的错误消息。 创建和多个表单相对应的 ActionForm 由于 ActionForm组件 实际上就是一个 JavaBean组件 ,它 包装表示 层 页面表单中的用户请求的参数、并 用来在 表示 层和控制层 之间 传递 请求的表单中的 数据。 在常规的 Struts Web应用系统的表示层开发中, 一般是 针对一个 HTML 表单 设计出对应的 ActionForm 组件,并在该 ActionForm组件类中定义出与请求的表单相匹配的成员属性。 Struts 框架系统程序 利用 JavaBean 组件技术中 的自省 机制, 把 HTML 页面 表 单请求 的数据保存下来 , 然后在 Action 组件类 中通过 ActionForm组件类 的一个 对象 实例 来 读取这些请求 数据。 但常规的一个页面表单对应一个 ActionForm组件类的实现方法,将会导致出现大量 的 ActionForm组件类。 因为,在实际的应用系统中的表示层中会存在大量的表单。 能否对此进行优化设计以减少 ActionForm 组件类的数量,而 创建和多个表单相对应的ActionForm组件类呢。 同时又如何区分不同的表单请求呢。 创建和多个表单相对应的 ActionForm 组件类 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 11/19 页 1)页面中的表单与 ActionForm 组件类 之间的对应关系 一般可以为每个表单提供一个 对应的 ActionForm 组件类以产生 出 “ 一对一”的关系,当然也可以为多个不同的表单提供一个共同的 ActionForm 组件类以产生 出 “多对一” 的关系。 如此设计的主要目的是减少 ActionForm 组件类的个数,从而避免重复单调地编程get/set 方法。 因为一般在多个表单中可能会有重复的数据项目一一如在用户登录表单和注册表单中都包含有“用户名称”和“用户密码” 的数据项目。 2)所应该 要 解决的 技术 问题 由于采用了“ 多个表单对应同一个 ActionForm 组件类 ”的设计方案,相应地所带来的问题是如何在 ActionForm 组件中识别当前是那个页面表单在产生请求提交,从而对与该请求表单相对应的数据项目进行检查和访问操作。 否则将会出现页面请求和后台的数据 处理之间产生 出 关系混乱。 比如,如果现在用户是在进行登陆请求,那么就只应该在 ActionForm 组件类的validate()方法中对 userName 和 userPassWord 这样的两个 数据项目进行错误检查,而不应该对其他的数据项目如 confirmPassWord(确认密码)进行错误检查。 3)解决的方法 通过在每个请求的页面表单中放入一个隐藏( hidden)字段来标识各个不同的表单类型,每当某个表单请求后再根据该隐藏字段的值推断出请求的页面表单的类型。 该方法的基本原理是在 HTML 的表单中应用 html:hidden property=formType value=1/标签 ,并利用该标签中的 value 属性 传递不同的数据值。 因为,每当表单进行提交时,该隐藏字段的值也会传递到服务器端。 然后只需要在服务器端的组件如 ActionForm 或者 Action 类中识别该字段的值,也就获知是哪。j2ee项目实训struts框架技术——第5章struts框架actionform组件及应用第1部分
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。