尽管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是处理用户输入验证和错误反馈的重要组件,它们使得开发者能够优雅地管理应用程序中的错误信息和用户消息。 ActionError类是用来存储错误信息的,它继承自`java.lang....
在Struts2中,`ActionError`和`ActionMessage`是两个重要的概念,它们用于处理用户界面与控制器之间的错误信息和成功消息传递。这两个类是Struts2提供的一种灵活的方式来管理验证失败或操作成功时的反馈信息。 **...
6. **异常处理**:Struts的异常处理机制可以帮助开发者优雅地管理程序中的错误和异常,书中会讨论如何配置和使用ActionError和ActionMessage。 7. ** strutstiles 插件**:Struts Tiles是一个强大的布局和页面组装...
4. **actionmessage标签**:与`actionerror`类似,`<s:actionmessage>`用于显示提示信息。在Action中使用`addActionMessage()`添加消息,然后在JSP页面上使用`<s:actionmessage />`显示。 5. **append标签**:辅助`...
Struts提供了全局的异常处理机制,通过定义ActionError和ActionMessage,可以在出现异常时统一处理并展示给用户。 **拦截器(Interceptors)** Struts 2引入了拦截器,它们是实现AOP(面向切面编程)的关键。拦截...
errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError("loginform.error.username")); } if (userpass == null || userpass.equals("")) { errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError(...
4. `<s:actionmessage>`:与`s:actionerror`类似,但用于显示普通的提示信息,比如用户操作成功后的反馈。当在Action中使用`addActionMessage()`添加消息后,`<s:actionmessage />`会把这些信息展示在页面上。 5. `...
在Action中使用`addActionError()`方法添加错误,然后在JSP页面中通过`<s:actionerror>`显示。例如: ```java public String execute() { addActionError("第一条错误消息!"); addActionError("第二条错误消息...
与`actionerror`类似,使用`addActionMessage()`添加消息,然后通过此标签展示。 5. **append 标签**: `<s:append>`是迭代器的辅助标签,可以合并多个迭代器中的内容。例如,将三个列表合并成一个迭代器进行遍历...
4. **actionmessage 标签**:与`actionerror`类似,但用于显示提示信息。在Action中添加消息后,JSP中使用`s:actionmessage`标签显示: ```java public String execute() { addActionMessage("第一条普通消息!")...
- `<s:actionerror>` 标签用于显示在Action执行过程中产生的错误消息。 - 通常用于展示Action执行失败时的信息提示。 **示例代码:** ```xml <s:actionerror/> ``` --- #### 四、`<s:actionmessage>`标签(Action...
3. **actionerror标签**:`<s:actionerror>` 用于显示Action级别的错误信息。当在Action类中使用`addActionError`方法添加错误后,可以在JSP页面上使用此标签显示: ```jsp <s:actionerror/> ``` 4. **...
Struts1.3提供ActionMessage和ActionError接口,它们可以在ActionContext中存储,并在JSP页面上显示。在Action类中添加错误或消息,然后在JSP页面通过Struts标签库进行渲染。 4. 配置文件中的全局转发与重定向 ...
Struts1提供了一系列的异常处理机制,如`ActionError`和`ActionMessage`等,用于捕捉和处理异常情况。此外,还可以通过配置文件来定义全局的异常处理逻辑。 #### 八、Struts1的国际化支持 Struts1支持多语言环境,...
8. **Action Error and Field Error Tags**: 如`<s:actionerror>`、`<s:fielderror>`,用于显示验证错误信息。 9. **Action Messages Tags**: `<s:actionmessage>`用于显示Action级别的消息,通常用于成功操作的...
例如,Struts提供了ActionError和ActionMessage机制来处理错误信息,以及Validator框架进行数据验证。 总之,Struts为Java Web开发提供了一种强大的架构,通过规范的MVC模式,降低了开发复杂性,提高了代码的可读性...
`ActionErrors`是一个集合,可以存储多个`ActionError`对象,每个`ActionError`代表一条具体的错误消息。例如,如果用户没有输入第二个数字,可以通过`errors.add()`方法将错误信息添加到`ActionErrors`中。 在...
4. <s:actionerror/>-----如果action的errors有值那么显示出来 5. <s:actionmessage/>-----如果action的message有值那么显示出来 6. <s:append></s:append>-----添加一个值到list,类似于list.add(); 7. ...
当表单提交时,Struts会根据这些规则对数据进行验证,并在错误发生时将错误信息添加到ActionMessage或ActionError。 **三、动态Form** 动态Form是指在运行时根据数据库或其他数据源动态生成的表单。这在处理复杂或...
`<s:actionerror/>` 和 `<s:actionmessage/>` 标签用于在视图层展示来自控制器层(Action)的消息。例如,如果Action中有以下代码: ```java if (username.isEmpty()) { addActionError("用户名不能为空"); } ``` ...