actionMessages(),actionError()介绍

转载 2007年10月15日 10:20:00

尽管Struts框架提供了有效的异常处理机制,但不能保证处理所有的错误,这时Struts框架会把错误抛给Web容器,在默认情况下Web容器会向用户浏览器直接返回原始信息。如果想避免直接让用户看到这些原始信息,可以在web.xml中配置<error-page>元素,以下代码演示了如何避免用户看到HTTP 404、HTTP 500错误和Exception异常。

web.xml:
  <error-page>
    <error-code>404</error-code>
    <location>/exception/error404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/exception/error500.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/exception/default.jsp</location>
  </error-page>
当WEB容器捕获到exception-type或error-code指定的错误时将跳到由location指定的页面。

 问题:当form bean 为动态bean时,在action中无法对form bean数据进行验证,因为formbean没有具体实现类。action中无法引用
 ActionError/ActionErrors/ActionMessage/ActionMessages:

有时候你需要向用户提供相关处理信息,包括表单验证时发现错误等。
1. 相关类介绍:
ActionMessage:用于保存一个与资源束对应的提示信息。主要构造函数如:
ActionMessage(String message);
ActionMessage(String message,paramater)。

ActionMessages:用于保存多个ActionMessage。并在html:errors 和html:messages中起作用。
主要构造函数:
ActionMessages().
主要方法是add(String property,ActionMessage message)
ActionMessages有一个HashMap类型messages保存多个ActionMessage对象,每个ActionMessage对象都有唯一的一个property标识。这个property可以是自定义的任意字符串,也可以由org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE指定
html:messages/html:errors使用property属性访问某个资源

ActionErrors:用于保存一个与资源束对应的错误信息。用法跟ActionMessages差不多。
ActionError不赞成使用。


2. 版本:
struts1.1中用ActionErrors报告错误,用ActionMessages提供信息。
在struts1.2中使用ActionMessages提供信息和错误,不赞成使用ActionError
struts1.3中已经没有ActionError类了。

3. AtionErrors和ActionMessages的区别

1. ActionErrors是ActionMessages的一个子类,功能几乎相同,不同点在于标签<html:errors/>和<html:messages>的使用上的区别。
html:errors指定了footer和header属性。默认值为errors.header和errors.footer,需要时可以自己指定。如果资源属性文件配置了 errors.header和errors.footer,则任何时候使用html:errors时开头和结尾都是这两个属性对应的资源信息。
而html:message默认情况下没有errors.header和errors.footer值,当然可以自己指定。

2. html:errors可以根据property属性指定显示一个错误信息。html:messages有一个必添项id。html:messages不能直接显示信息,它将选出的信息放入一个用id标识的Iterator对象里,然后在用ben:write或JSTL c:out标签显示每个信息.例如:
<html:messages message="true" id="msg">
    <c:out value="${msg}"/><br />
</html:messages>

3. 具体的一个例子:
接受输入页面input.jsp:

  <html:form action="/errormessage/input">
    phoneNumber : <html:text property="phoneNumber"/> <html:errors     property="<%=org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE %>"/><br/>
  <html:submit/><html:cancel/>
  </html:form>

struts-config.xml:
  <form-beans >
    <form-bean name="inputForm" type="cn.rolia.struts.form.errorexception.InputForm" />
  </form-beans>
  <action-mappings >
    <action
      attribute="inputForm"
      input="/errormessage/input.jsp"
      name="inputForm"
      path="/errormessage/input"
      scope="request"
      type="com.yourcompany.struts.action.errormessage.InputAction"
      validate="false">
      <forward name="success" path="/errormessage/success.jsp" />
    </action>
  </action-mappings>

InputAction.java:

public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
  cn.rolia.struts.form.errorexception.InputForm inputForm = (cn.rolia.struts.form.errorexception.InputForm) form;// TODO Auto-generated method stub
  String phoneNumber = inputForm.getPhoneNumber();
  if(phoneNumber.length()<4){
  ActionErrors messages = new ActionErrors();
    messages.add(org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE,new ActionMessage("error.errormessage.input"));
    this.saveErrors(request, messages);
    return mapping.getInputForward();
  }

  return mapping.findForward("success");
}
解说:用户输入手机号码,页面跳转到InputAction控制层进行处理,若输入数据小于4,则创建一个ActionMessage类存储相关错误信息。然后再创建ActionErrors类将此ActionMessage放入ActionErrors。再调用Action的saveErrors方法将此ActionErrors保存的request范围里,然后返回input.jsp页面要求重新输入并用html:errors提示错误信息。

4. Action包含saveErrors()方法和saveMessages()方法。如果创建的ActionErrors则应该调用saveErrors(),若创建的是ActionMessages则应该调用saveMessages()方法。
saveErrors()接收ActionMessages而不是ActionErrors;同时将其保存在request中并用一个由org.apache.struts.Globals.ERROR_KEY指定的常量” org.apache.struts.Globals.ERROR_KEY”标识这个ActionMessages,便于html:errors查找。saveMessages()方法接收ActionMessages同时将其保存在request中并用一个由org.apache.struts.Globals.MESSAGE_KEY指定的常量” org.apache.struts.Globals.MESSAGE_KEY”标识这个ActionMessages,进而让html:messages从常量Globals.ERROR_KEY中遍历获取信息。可以将其属性message设置为true,那么它将从常量Globals.MESSAGE_KEY中遍历获取信息。

5. 默认情况下html:messages从
如果你想将信息保存在session里而不是request,struts1.2提供了
struts1.1没有的saveMessages(HttpSession session, ActionMessages messages)方法和saveErrors(javax.servlet.http.HttpSession session, ActionMessages errors)方法。
InputAction.java:

public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
cn.rolia.struts.form.errorexception.InputForm inputForm = (cn.rolia.struts.form.errorexception.InputForm) form;// TODO Auto-generated method stub
  String phoneNumber = inputForm.getPhoneNumber();
  if(phoneNumber.length()<4){
    ActionErrors messages = new ActionErrors();
    messages.add(org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE,new ActionMessage("error.errormessage.input"));
    this.saveErrors(request.getSession(true), messages);
    return mapping.getInputForward();
  }

  return mapping.findForward("success");
}

 

如何介绍你的项目

项目问题APP 项目 一般面试官在面试过程中,让求职者讲一下之前的项目,好多学生只是仅仅把自己会的这些知识点说了出来,而遇到不会的了有学生就直接回答“那个模块不是我做”,但凡回这一句话的面试都没戏。...
  • qq_35827461
  • qq_35827461
  • 2016年11月30日 10:27
  • 2775

jQuery简单介绍

jQuery 库可以通过一行简单的标记被添加到网页中。jQuery 库 - 特性jQuery 是一个 JavaScript 函数库。 jQuery 库包含以下特性: HTML 元素选取 HTML...
  • Care_about
  • Care_about
  • 2016年10月24日 10:01
  • 465

JQuery 的简单介绍

JQuery的优势 强大的选择器 出色的DOM封装 可靠的事件处理机制 出色的浏览器兼容性 使用隐式迭代简化编程 丰富的插件支持 体积小,压缩后只有100KB左右 在页面中引入jQuery 首先需在...
  • wushuang3625
  • wushuang3625
  • 2017年03月12日 22:51
  • 247

mysql数据库入门(1)--各种数据库介绍

各种数据库介绍数据库介绍1. 什么是数据库    简单说存放数据的仓库,这个仓库按照一定的数据结构来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里 的数据     我们简单形象的理解...
  • u010472499
  • u010472499
  • 2016年11月04日 15:33
  • 1495

Spring MVC简单介绍

对SpringMVC框架介绍    The Spring Web model-view-controller (MVC) framework的设计是围绕一个分发期,将请求处理程序,可配置的处...
  • jiang_qing_kai
  • jiang_qing_kai
  • 2015年01月18日 18:58
  • 1039

常见字体介绍

如题,最近发现手机字体是个大学问,头一次发现原来字体里头差别这么大。 首先常见中文字体,宋体,黑体,仿宋,楷体,行楷,等等。其中各种字体大致区别 字号,点制和号制,打印时一点为0.35mm,号制为...
  • me4weizhen
  • me4weizhen
  • 2017年03月15日 21:49
  • 521

AWS系列一:AWS简介

初创公司可以使用AWS降低公司初始投入资金和基础设施的维护,而将更多的资金和精力集中在产品创新上。 前段时间被facebook收购的Instagram,正是因为使用了AWS,才使得13人的团队创造了1...
  • skyer_lei
  • skyer_lei
  • 2014年04月20日 20:11
  • 1109

MySQL基本介绍

1、B/S结构的软件  浏览器/服务器       数据存在哪里? 数据库。  文本里面 2、数据库系统(database system)是计算机系统中一种专门管理、存放数据资源的系...
  • Merlin_feng
  • Merlin_feng
  • 2015年01月01日 02:10
  • 664

Java基础介绍(英文)

In object-oriented terminology, a class is a term that describes a group or collection of objects wi...
  • zmycoco2
  • zmycoco2
  • 2013年06月04日 07:33
  • 1690

Hibernate简单介绍

. Hibernate介绍:      Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库。它不仅提供了从...
  • clypm
  • clypm
  • 2014年03月20日 11:07
  • 1532
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:actionMessages(),actionError()介绍
举报原因:
原因补充:

(最多只允许输入30个字)