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"); }
|
分享到:
相关推荐
1、struts国际化的配置 ... 理解ActionMessage和ActionMessages两个对象的区别 如何传递国际化消息? * 调用saveMessage()传递普通消息 如何显示国际化消息? 通过标签显示消息(可以显示普通消息和错误消息)
6. **ActionMessages与ActionErrors的区别**: 虽然`ActionErrors`和`ActionMessages`都用于传递信息,但`ActionErrors`主要用于错误处理,而`ActionMessages`适用于一般的消息传递,包括成功的操作提示等。它们的...
ActionMessages和ActionErrors是Struts提供的消息和错误信息处理机制。ActionMessages用于存储成功的信息或提示信息,而ActionErrors则用于存储错误信息。这些信息可以在Action执行后被传递给视图层,以便向用户展示...
在Action类中,你可以使用`ActionMessages`或`ActionErrors`对象来添加、存储和传递消息。例如: ```java ActionMessages messages = new ActionMessages(); messages.add(ActionMessages.GLOBAL_MESSAGE, new ...
在大型Web应用中,数据分页是必不可少的功能,它帮助用户更有效地浏览和管理大量的信息。本篇文章将深入讲解如何在Struts框架中实现分页功能。 首先,我们来看分页实例的核心组成部分: 1. **获取数据和翻页控制...
8. **异常处理**:学习如何在Struts中配置全局和局部异常处理策略,使用ActionError和ActionMessages管理错误和消息。 9. **Tiles框架集成**:Struts可以与Tiles框架结合使用,实现更复杂的页面布局和组件重用。 ...
在Struts2中,资源配置文件和国际化(i18n)是两个非常重要的概念,它们对于创建多语言支持和提供用户友好的界面至关重要。 资源配置文件通常以.properties为扩展名,它们存储了应用中的静态文本,如错误消息、提示...
在Action类中,我们可以通过`ActionMessages`或`ActionErrors`接口来获取和显示这些消息。例如,当用户登录失败时,可以在Action中添加错误消息: ```java public class LoginAction extends Action { public ...
Struts提供了ActionError和ActionMessages类用于错误和消息的处理。这些类可以帮助开发者更好地管理和显示错误信息,增强用户体验。 #### 三、Struts标签库 Struts提供了丰富的自定义标签库,用于简化页面开发,...
它遵循模型-视图-控制器(MVC)设计模式,使得开发者能够清晰地分离业务逻辑、用户界面和控制流程,从而提高代码的可维护性和可扩展性。 #### 三、Struts中的错误处理机制 在Struts中,错误处理主要包括两个方面:...
例如,通过资源包(Resource Bundle)实现多语言支持,通过 ActionError 和 ActionMessages 实现错误和消息管理,通过 FileUpload 类处理文件上传。 在实际开发中,为了更好地理解和使用 Struts 1.3.8,我们需要...
Struts提供了ActionError和ActionMessages机制来处理验证错误,以及全局的异常处理器来捕获并处理程序运行时可能出现的异常。 总结来说,使用Struts技术实现留言和发帖功能,主要包括以下几个步骤: 1. 创建Action...
- 在ActionForm中,我们可以使用`ActionMessages`对象来收集和显示错误或提示消息。这些消息可以在资源文件中定义,然后通过`getText()`方法获取。 5. **设置用户首选语言** - 用户的首选语言通常通过HTTP请求头...
8. **异常处理**:Struts提供了ActionError和ActionMessages,用于处理应用程序中的错误和消息。全局异常处理器可以捕获并统一处理未被捕获的异常。 9. **Struts标签库**:除了基本的HTML标签,Struts还提供了一套...
Struts提供了ActionError和ActionMessages机制来处理异常,可以将错误信息传递到视图进行显示,增强了错误处理的能力。 9. **Struts 1与Struts 2的区别** Struts 2是Struts 1的升级版,引入了更多现代Web开发的...
- `ActionMessages`:用于存储和显示用户界面的错误消息。 6. **其他辅助类和方法**: 示例代码中还引用了一些辅助类,例如 `ListPage`、`Date`、`Calendar` 和 `Vector`,这些可能是用于处理分页、日期和集合...
WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中被广泛应用,尤其是在处理复杂的业务逻辑和数据呈现时。国际化(i18n,Internationalization)是Web应用中的一项重要功能,使得软件...
这可以通过Struts的ActionError和ActionMessages实现,将错误信息添加到ActionContext中,然后在JSP页面上显示。 总的来说,这个项目涵盖了Struts1的MVC架构、JSP页面设计、数据库连接、用户输入验证、业务逻辑处理...
- 如何使用Struts1.x的ActionError和ActionMessages来处理和显示应用程序中的错误信息。 - 异常处理机制,如Global Exception Handler,确保程序在遇到未预期错误时能够优雅地恢复。 7. **国际化和本地化**: - ...