`
neil-jh
  • 浏览: 147521 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ActionError,ActionMessage介绍

阅读更多
尽管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");
}
分享到:
评论

相关推荐

    Struts2-ActionError-ActionMessage-Example

    在Struts2框架中,ActionError和ActionMessage是处理用户输入验证和错误反馈的重要组件,它们使得开发者能够优雅地管理应用程序中的错误信息和用户消息。 ActionError类是用来存储错误信息的,它继承自`java.lang....

    Struts2&ActionError&ActionMessage&Demo

    在Struts2中,`ActionError`和`ActionMessage`是两个重要的概念,它们用于处理用户界面与控制器之间的错误信息和成功消息传递。这两个类是Struts2提供的一种灵活的方式来管理验证失败或操作成功时的反馈信息。 **...

    Struts_In_Action(中文完整版)

    6. **异常处理**:Struts的异常处理机制可以帮助开发者优雅地管理程序中的错误和异常,书中会讨论如何配置和使用ActionError和ActionMessage。 7. ** strutstiles 插件**:Struts Tiles是一个强大的布局和页面组装...

    教案最详细的Struts学习标签.pdf

    4. **actionmessage标签**:与`actionerror`类似,`&lt;s:actionmessage&gt;`用于显示提示信息。在Action中使用`addActionMessage()`添加消息,然后在JSP页面上使用`&lt;s:actionmessage /&gt;`显示。 5. **append标签**:辅助`...

    struts in action 源码

    Struts提供了全局的异常处理机制,通过定义ActionError和ActionMessage,可以在出现异常时统一处理并展示给用户。 **拦截器(Interceptors)** Struts 2引入了拦截器,它们是实现AOP(面向切面编程)的关键。拦截...

    关于struts表单验证

    errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError("loginform.error.username")); } if (userpass == null || userpass.equals("")) { errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError(...

    Struts2标签库

    4. `&lt;s:actionmessage&gt;`:与`s:actionerror`类似,但用于显示普通的提示信息,比如用户操作成功后的反馈。当在Action中使用`addActionMessage()`添加消息后,`&lt;s:actionmessage /&gt;`会把这些信息展示在页面上。 5. `...

    我见过的最详细的struts 2 标签整理.docx

    在Action中使用`addActionError()`方法添加错误,然后在JSP页面中通过`&lt;s:actionerror&gt;`显示。例如: ```java public String execute() { addActionError("第一条错误消息!"); addActionError("第二条错误消息...

    史上最全的struts2标签

    与`actionerror`类似,使用`addActionMessage()`添加消息,然后通过此标签展示。 5. **append 标签**: `&lt;s:append&gt;`是迭代器的辅助标签,可以合并多个迭代器中的内容。例如,将三个列表合并成一个迭代器进行遍历...

    最详细的Struts2标签.pdf

    4. **actionmessage 标签**:与`actionerror`类似,但用于显示提示信息。在Action中添加消息后,JSP中使用`s:actionmessage`标签显示: ```java public String execute() { addActionMessage("第一条普通消息!")...

    JSP_struts2标签大全

    - `&lt;s:actionerror&gt;` 标签用于显示在Action执行过程中产生的错误消息。 - 通常用于展示Action执行失败时的信息提示。 **示例代码:** ```xml &lt;s:actionerror/&gt; ``` --- #### 四、`&lt;s:actionmessage&gt;`标签(Action...

    Struts2标签梳理

    3. **actionerror标签**:`&lt;s:actionerror&gt;` 用于显示Action级别的错误信息。当在Action类中使用`addActionError`方法添加错误后,可以在JSP页面上使用此标签显示: ```jsp &lt;s:actionerror/&gt; ``` 4. **...

    struts1.3页面跳转问题

    Struts1.3提供ActionMessage和ActionError接口,它们可以在ActionContext中存储,并在JSP页面上显示。在Action类中添加错误或消息,然后在JSP页面通过Struts标签库进行渲染。 4. 配置文件中的全局转发与重定向 ...

    struts1总结

    Struts1提供了一系列的异常处理机制,如`ActionError`和`ActionMessage`等,用于捕捉和处理异常情况。此外,还可以通过配置文件来定义全局的异常处理逻辑。 #### 八、Struts1的国际化支持 Struts1支持多语言环境,...

    struts2-tags-API.rar_struts2 api_struts2 tag api_struts2 tags ch

    8. **Action Error and Field Error Tags**: 如`&lt;s:actionerror&gt;`、`&lt;s:fielderror&gt;`,用于显示验证错误信息。 9. **Action Messages Tags**: `&lt;s:actionmessage&gt;`用于显示Action级别的消息,通常用于成功操作的...

    Struts初步知识

    例如,Struts提供了ActionError和ActionMessage机制来处理错误信息,以及Validator框架进行数据验证。 总之,Struts为Java Web开发提供了一种强大的架构,通过规范的MVC模式,降低了开发复杂性,提高了代码的可读性...

    struts2数据验证与国际化

    `ActionErrors`是一个集合,可以存储多个`ActionError`对象,每个`ActionError`代表一条具体的错误消息。例如,如果用户没有输入第二个数字,可以通过`errors.add()`方法将错误信息添加到`ActionErrors`中。 在...

    struts2 标签库 帮助文档

    4. &lt;s:actionerror/&gt;-----如果action的errors有值那么显示出来 5. &lt;s:actionmessage/&gt;-----如果action的message有值那么显示出来 6. &lt;s:append&gt;&lt;/s:append&gt;-----添加一个值到list,类似于list.add(); 7. ...

    Struts高级部分(2)(常用Action、验证框架、动态Form

    当表单提交时,Struts会根据这些规则对数据进行验证,并在错误发生时将错误信息添加到ActionMessage或ActionError。 **三、动态Form** 动态Form是指在运行时根据数据库或其他数据源动态生成的表单。这在处理复杂或...

    ssh2实现登录注册

    `&lt;s:actionerror/&gt;` 和 `&lt;s:actionmessage/&gt;` 标签用于在视图层展示来自控制器层(Action)的消息。例如,如果Action中有以下代码: ```java if (username.isEmpty()) { addActionError("用户名不能为空"); } ``` ...

Global site tag (gtag.js) - Google Analytics