祸兮福所倚,福兮祸所伏

想随便当个小职员,随便赚点钱然后随便和一个不美也不丑的普通女孩结婚,随便生两个孩子,先生个女孩再生个男孩。等女儿结婚,儿子也能够独挡一面的时候,然后就退休,然后每天过着下着象棋和围棋的悠闲生活。然后在自己的老婆死之前自己先老死这种生活多美好呀!

BlogJava 首页 新随笔 联系 聚合 管理
  0 Posts :: 8 Stories :: 0 Comments :: 0 Trackbacks

大多数的表单交互中,用户都需要看到操作的结果。以一致的方式显示错误和信息是一个好的框架应该具备的功能。在前面一节中,我们讨论了通过消息资源对象本地化消息。通过名/值对让消息资源对象和属性文件对应。一个基于struts的应用会在处理资源包之前在ActionErrors对象中收集和查找,确认和通知信息。下面的图示解释了struts中涉及到错误处理机制的类。

我们将简单的讨论前面解释的交互动作。我们将看到struts怎样从本地特定消息中获得消息key,又怎么在视图中以一致的方式得到处理。我们将用jsp作为视图组件。

    用ActionError标识错误

       实现Action.execute(…) 或 ActionForm.validate(…)方法,应该可以捕捉验证和应用程序特定错误到ActionErrors对象中,他们组成了ActionError对象。一个ActionError对象有一个消息key和一个可选对象用来存放动态返回的消息。参考上一节的相关信息,一个ActionErros对象不用关心本地化和相关的资源包就可以创建。我们可以处理118N当ActionError对象处理消息时。可以参考ActionErrorAPI获得完全的创建ActionError对象的方法列表。一旦一个ActionError对象创建,就应该使用ActionError对象的ActionError.add方法添加到ActionError对象组中,并且传递ActionError和检测到校验错误的属性名。为了保存错误消息而不关联到属性,可以用ActionErrors.GLOBAL_ERROR代替属性参数。使用属性名创建ActionError对象在ActionErrors一节解释。ActionError类扩展ActionMessage类;和struts1.1一样,ActionError类简单的把调用委托给ActionMessage类。

    用ActionErrors管理错误

      ActionErrors对象使用HashMap方式管理所有ActionError对象,名是消息属性名,值是ActionMessageItem对象。ActionMessageItem作为inner类声明在ActionMessages中。每一个ActionMessageItem对象由一个唯一的序列号和一个包含属性对应所有校验错误的的ArrayList对象组成。序列号用来排序ActionMessageItem集合,其中的校验错误通过开始标记为invalid的属性获得。ActionErrors.get返回一个ArrayList的迭代器,其中容纳了ActionError对象集合。这个迭代对象通过定制ErrorsTag标签引用,将在下节解释。

      在请求处理器,比如在Action.execute中,ActionErrors应该用属性名Action.ERROR_KEY保存到HttpServletRequest中;这个操作通过调用action基类的saveErrors方法,传递请求对象和ActionErrors对象作为参数。ActionErrors作为ActionForm.validate(…)的结果产生,由在请求对象中的RequestProcessor使用Action.ERROR_KEY保存。下一个视图可以用ErrorsTag来获得ActionErrors对象;ErrorsTag可以用在jsp中。

      ActionErrors类扩展了actionMessages类。ActionErrors提供了静态成员GLOBAL_ERROR,ActionMessages提供了静态成员GLOBAL_MESSAGE,这些静态成员当消息不是特定属性时可以作为keys用。如果要保存ActionMessages对象到请求处理对象中,传递请求对象和ActionMessages对象给Action.saveMessages(…)方法即可;Action.saveMessages(…)对象使用Action.MESSAGE_KEY保存到请求对象中。

      如果想简单的获得消息keys,不用属性和动态参数,可以用org.apache.struts.util.RequestUtils.getActionErrors(…)方法转换一个String对象,String数组,或一个ErrorMessages对象(Vector)到一个ActionErrors对象中。对于这种方式,getActionErrors(…)会用ActionErrors.GLOBAL_ERROR代替属性参数。

    用ErrorsTag显示错误

        这个定制的标签显示消息到HTML文档中。它使用Action.ERROR_KEY从HttpServletRequest中获得ActionErrors对象,然后使用ActionErrors.get()方法获得容纳ActionError对象的ArrayList的迭代器。对ArrayList中的每一个ActionError对象,一个本地消息被写到response流中。默认使用session中的本地对象;但是可以在标签中定义相反的本地属性。默认情况下,资源包用Action.MESSAGES_KEY保存到上下文中,除潜昵┒ㄒ辶似渌粜浴R孕枰哺亲试窗绻桓鲆陨系幕咀试次募枰芾硎薄:蛃truts1.1一样,一个ErrorsTag仅能使用一个资源包家族(有相同的基本名称),因此在ActionErrors对象中的所有错误应该在资源包家族中都可以找到。因为ActionErrors对象中的所有ActionError对象都用属性名登记了,消息可以通过在ErrorsTag中定义一个属性名对应。ErrorsTag使用消息keys‘errors.header’和‘errors.footer’提供错误消息显示的标题和格式。

posted on 2005-06-09 09:09 塞翁 阅读(221) 评论(0)  编辑  收藏 所属分类: Java翻译