`

AtionErrors和ActionMessages的区别

阅读更多
AtionErrors和ActionMessages的区别
2008-06-30 08:57

        尽管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);    //调用Action的saveErrors方法将此ActionErrors保存的request范围里
                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从request中提取信息,如果你想将信息保存在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);    //调用Action的saveErrors方法将此ActionErrors保存的session范围里

                return mapping.getInputForward();
        }

        return mapping.findForward("success");
}

分享到:
评论

相关推荐

    一个利用struts做的简单国际化

    1、struts国际化的配置 ... 理解ActionMessage和ActionMessages两个对象的区别 如何传递国际化消息? * 调用saveMessage()传递普通消息 如何显示国际化消息? 通过标签显示消息(可以显示普通消息和错误消息)

    Struts记录整理文档

    6. **ActionMessages与ActionErrors的区别**: 虽然`ActionErrors`和`ActionMessages`都用于传递信息,但`ActionErrors`主要用于错误处理,而`ActionMessages`适用于一般的消息传递,包括成功的操作提示等。它们的...

    Struts API参考手册 PDF版本

    ActionMessages和ActionErrors是Struts提供的消息和错误信息处理机制。ActionMessages用于存储成功的信息或提示信息,而ActionErrors则用于存储错误信息。这些信息可以在Action执行后被传递给视图层,以便向用户展示...

    Struts 之旅 - 多国语言

    在Action类中,你可以使用`ActionMessages`或`ActionErrors`对象来添加、存储和传递消息。例如: ```java ActionMessages messages = new ActionMessages(); messages.add(ActionMessages.GLOBAL_MESSAGE, new ...

    struts分页实例

    在大型Web应用中,数据分页是必不可少的功能,它帮助用户更有效地浏览和管理大量的信息。本篇文章将深入讲解如何在Struts框架中实现分页功能。 首先,我们来看分页实例的核心组成部分: 1. **获取数据和翻页控制...

    StrutsInAction中文

    8. **异常处理**:学习如何在Struts中配置全局和局部异常处理策略,使用ActionError和ActionMessages管理错误和消息。 9. **Tiles框架集成**:Struts可以与Tiles框架结合使用,实现更复杂的页面布局和组件重用。 ...

    struts2官方例子8-资源配置文件的使用(包括国际化)

    在Struts2中,资源配置文件和国际化(i18n)是两个非常重要的概念,它们对于创建多语言支持和提供用户友好的界面至关重要。 资源配置文件通常以.properties为扩展名,它们存储了应用中的静态文本,如错误消息、提示...

    struts国际化功能

    在Action类中,我们可以通过`ActionMessages`或`ActionErrors`接口来获取和显示这些消息。例如,当用户登录失败时,可以在Action中添加错误消息: ```java public class LoginAction extends Action { public ...

    Struts架构和标签库介绍

    Struts提供了ActionError和ActionMessages类用于错误和消息的处理。这些类可以帮助开发者更好地管理和显示错误信息,增强用户体验。 #### 三、Struts标签库 Struts提供了丰富的自定义标签库,用于简化页面开发,...

    07Struts错误处理

    它遵循模型-视图-控制器(MVC)设计模式,使得开发者能够清晰地分离业务逻辑、用户界面和控制流程,从而提高代码的可维护性和可扩展性。 #### 三、Struts中的错误处理机制 在Struts中,错误处理主要包括两个方面:...

    Struts 1.3.8 学习笔记(六)

    例如,通过资源包(Resource Bundle)实现多语言支持,通过 ActionError 和 ActionMessages 实现错误和消息管理,通过 FileUpload 类处理文件上传。 在实际开发中,为了更好地理解和使用 Struts 1.3.8,我们需要...

    struts技术实现留言功能

    Struts提供了ActionError和ActionMessages机制来处理验证错误,以及全局的异常处理器来捕获并处理程序运行时可能出现的异常。 总结来说,使用Struts技术实现留言和发帖功能,主要包括以下几个步骤: 1. 创建Action...

    struts1多国语言的实现

    - 在ActionForm中,我们可以使用`ActionMessages`对象来收集和显示错误或提示消息。这些消息可以在资源文件中定义,然后通过`getText()`方法获取。 5. **设置用户首选语言** - 用户的首选语言通常通过HTTP请求头...

    Struts API官方英文版

    8. **异常处理**:Struts提供了ActionError和ActionMessages,用于处理应用程序中的错误和消息。全局异常处理器可以捕获并统一处理未被捕获的异常。 9. **Struts标签库**:除了基本的HTML标签,Struts还提供了一套...

    struts 1.2上传下载全部实例

    - `ActionMessages`:用于存储和显示用户界面的错误消息。 6. **其他辅助类和方法**: 示例代码中还引用了一些辅助类,例如 `ListPage`、`Date`、`Calendar` 和 `Vector`,这些可能是用于处理分页、日期和集合...

    Java Struts 教程

    Struts提供了ActionError和ActionMessages机制来处理异常,可以将错误信息传递到视图进行显示,增强了错误处理的能力。 9. **Struts 1与Struts 2的区别** Struts 2是Struts 1的升级版,引入了更多现代Web开发的...

    webwork国际化

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中被广泛应用,尤其是在处理复杂的业务逻辑和数据呈现时。国际化(i18n,Internationalization)是Web应用中的一项重要功能,使得软件...

    struts1+jsp登录注册全部代码 连接sqlserver2008数据库

    这可以通过Struts的ActionError和ActionMessages实现,将错误信息添加到ActionContext中,然后在JSP页面上显示。 总的来说,这个项目涵盖了Struts1的MVC架构、JSP页面设计、数据库连接、用户输入验证、业务逻辑处理...

    Struts1.x其它文本编辑器使用SQL2005.rar

    - 如何使用Struts1.x的ActionError和ActionMessages来处理和显示应用程序中的错误信息。 - 异常处理机制,如Global Exception Handler,确保程序在遇到未预期错误时能够优雅地恢复。 7. **国际化和本地化**: - ...

Global site tag (gtag.js) - Google Analytics