`
huangjainpeng
  • 浏览: 5478 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

ActionMessages,用法,(转)

阅读更多

 

ActionMessages,用法,(转)
2007-08-12 22:10


在ActionMessages中包含着一个HashMap,其中的key就是add方法的property参数,然而他的值对应的是一个ActionMessageItem,ActionMessageItem是该类的一个内部类,当中包含了一个ArrayList。
由此可见,一个property中可以包含着多个ActionMessage,这些ActionMessage都将保存在ActionMessageItem的ArrayList中。


1 public void   add(String property, ActionMessage message) {
2  
3          ActionMessageItem item =   (ActionMessageItem) messages.get(property);
4          List list = null ;
5  
6          if (item == null ) {
7              list = new   ArrayList();
8              item = new ActionMessageItem(list, iCount++ , property);
9  
10               messages.put(property, item);
11          } else   {
12              list =   item.getList();
13           }
14  
15           list.add(message);
16  
17      }


每次添加新的ActionMessage中,ActionMessages类会判断HashMap中的get(property)是否存在,如果存在的话,就获得该list = item.getList();并把ActionMessage添加到其中。如果不存在,就会创建一个新的list = new   ArrayList();
再将内容添加到当中去。总的来说,ActionMessages就是一个保存信息的容器。通常ActionMessages是不会单独使用的,和他相关的一些Struts组件会对其进行访问和操作:

标签

标签是一个Struts组件,他的内部标签类对ActionMessages类的子类ActionErrors进行访问。通过在request和session中找到ActionErrors来获得相关信息。在此之前,先来了解下标签的几个重要属性:

name属性:
指定ActionMessages在request和session范围内的属性key.默认值为Globals.ERROR_KEY。由此我们可以了解到Struts是如此保存和获取ActionMessages的:

保存:
ActionErrors errors = new ActionErrors();

request.setAttribute(Globals.ERROR_KEY ,errors);或者

session.setAttribute(Globals.ERROR_KEY ,errors);

获取:
ActionErrors errors = new ActionErrors();

errors = (ActionErrors)request.getAttribute(Globals.ERROR_KEY);或者

errors = (ActionErrors)session.getAttribute(Globals.ERROR_KEY);或者

该属性通常我们不用设置和更改他,用默认值就可以啦。

property属性:
用来指定消息的属性,如果不设置该属性,那么标签将显示ActionMessages中的所有属性。如果设置了该属性,则只显示HashMap中Key为property属性值的ArrayList集合。通常,我们在调用ActionMessages的add方法时,会指定add方法的property参数,也就是第一个参数,将相关信息添加到指定的property对应的ArrayList中。那么我们要显示相关信息时,就可以指定输出标签的property属性对应的ArrayList,这两个property是相互对应的。

bundle属性:
指定资源文件的key属性。缺省的情况下调用的是默认的资源文件Application.properties。
如在struts-config.xml中声明的资源文件信息如下:

   < message - resources parameter = " com.kook.struts.ApplicationResources "    /> 
    < message - resources key = " ch "   parameter = " com.kook.struts.ApplicationResources_ch "    /> 
    < message - resources key = " en "   parameter = " com.kook.struts.ApplicationResources_en "    /> 
对应的add方法如下:

1 ActionErrors errors = new   ActionErrors();
2 if(name==null || name.length()<1 )
3   {
4        errors.add("name",new ActionMessage("kong" ));
5    }
6   return errors; 
new   ActionMessage( " kong " )对应在key="en"的资源文件中为:

kong=bu neng wei kong 
JSP中的标签:

1 <html:errors property="name" bundle="en"/> 
这时候将会输出key="en"的资源文件中的"kong"对应的信息:bu neng wei kong


标签

标签是用来在JSP页面上输出一条消息的。通常我们在做添加数据的时候,如果添加成功,通常会在前台页面反馈给用户一条“添加成功”的信息,这时候我们就可以用到这个标签。

name属性:

是指ActionMessages对象保存在request或session中的属性key,即request.setAttribute("heihei", messages);中的第一个参数。

message属性:如果为true,表示是从request或session中取得key为Globals.MESSAGE_KEY的ActionMessages对象,此时该标签设置的name属性的无效的。如果为false,表示从该标签的name属性来获得request或session的key值。缺省值就为false。

id属性:这个属性就不说了,检索出ActionMessages集合中单个对象的标识,他和的id是同一个意思。

小实验:

在action中的execute方法中添加如下代码:

1 ActionMessages messages = new ActionMessages();
2         
3 messages.add("", new ActionMessage("haha",false));
4         
5 this.saveMessages(request, messages);        

7 return new ActionForward("/form/hello.jsp");
表示往ActionMessages对象中添加一条信息new ActionMessage("haha",false),并保存在request当中this.saveMessages(request, messages);   那么在这个方法中,他是如何保存ActionMessage对象的呢?下面是 saveMessages 方法的源代码:

1 protected void saveMessages(
2          HttpServletRequest request,
3          ActionMessages messages) {

5          // Remove any messages attribute if none are required
6          if ((messages == null) || messages.isEmpty()) {
7              request.removeAttribute(Globals.MESSAGE_KEY);
8              return;
9          }
10 
11          // Save the messages we need
12          request.setAttribute(Globals.MESSAGE_KEY, messages);
13      }
观察这段代码不难发现,他是将ActionMessages存放在key为Globals.MESSAGE_KEY当中的,因此我们在调用ActionMessages的add方法时,他的property参数(add方法的第一个参数)就没有必要让我们自己去手动指定了,因为不论你指定什么参数,只要调用了saveMessages方法(这是前提),他只会将信息保存在固定的常量key中。
这时前台的hello.jsp页面的显示代码为:

1 <html:messages id="a" message="true">
2      <bean:write name="a"/>
3 </html:messages>
上面代码设置了message属性,表示从Globals.MESSAGE_KEY中获取信息,前面也有提到,此时指定name属性是无效的。

那如果我想只显示我自己指定的信息怎么办呢?

我们可以不使用saveMessages方法而使用最原始的办法,通常最原始的办法也是最有效的,Struts其实是封装了许多最原始的实现。我们先将action中的代码改为:

ActionMessages messages   =    new   ActionMessages();
        
messages.add( "" ,   new   ActionMessage( " haha " , false ));
        
request.setAttribute( " show " , messages);

return    new   ActionForward( " /form/hello.jsp " ); 
然后在JSP页面中指定name属性,而将message设为false就可以了:

1 <html:messages id="a" name="show">
2      <bean:write name="a"/>
3 </html:messages>
这里是直接省略了message属性,因为他的缺省值就是false。这样就可以达到输出自己指定属性的信息啦!

参考资料:http://hi.baidu.com/hibydu/blog/item/6569bb3d72ae1102bba16747.html

 

 

分享到:
评论

相关推荐

    Struts记录整理文档

    它们的使用方法相似,但处理的上下文不同。 7. **保存和检索消息**: 在Action中,使用`saveErrors(HttpServletRequest, ActionErrors)`或`saveMessages(HttpServletRequest, ActionMessages)`方法将错误或消息...

    struts 1的标签的用法详细

    8. JSP页面使用Struts标签显示数据或进行其他操作。 ### 二、控制器组件 #### 1. struts-config.xml 这是Struts的核心配置文件,定义了Action、ActionForm、ActionMapping等元素,用于指导请求处理和视图渲染。 #...

    07Struts错误处理

    - 通过调用`saveErrors`方法将`ActionMessages`对象中的错误信息保存到请求范围(request scope)中。 - 示例代码: ```java saveErrors(request, response, messages); ``` - **页面显示:** - 使用`...

    Struts 之旅 - 多国语言

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

    struts中ActionForm的validate方法使用小得

    本文将详细讨论如何在Struts中使用ActionForm的`validate`方法进行数据验证。 `validate`方法是在ActionForm中定义的一个可选方法,用于在提交表单数据后验证用户输入的有效性。这个方法通常会在调用Action的`...

    Struts入门实践

    - **错误消息处理**: 使用 `ActionMessages` 来管理错误消息,并通过 `ActionMessage` 定义具体的错误提示信息。 - **转向页面**: 根据不同的处理结果,返回不同的 `ActionForward` 对象,以实现页面跳转。 #####...

    struts分页实例

    在Action中,我们可以使用`ActionMessages`添加消息,并通过`saveMessages`方法保存到请求上下文中。在JSP页面上,使用`&lt;html:messages&gt;`标签来显示这些消息。 ```java ActionMessages messages = new ...

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

    你可以通过解压`Message_Resource_Struts2_Ant`这个压缩包,查看其中的源码和配置文件,学习具体步骤和实践方法。这些示例会涵盖如何配置Struts2的配置文件(struts.xml),以及如何在Action类和JSP页面中使用资源...

    jspSmartUpload完整的上传下载代码及一些实用的方法

    在Struts框架中,通常通过`Action`类的`PageContext`属性来访问页面上下文,但如果你无法直接获取,可以使用`HttpServletRequest`对象的`getSession()`方法来间接获取。`HttpServletRequest`是请求处理的核心对象,...

    Struts解决重复提交步骤

    ActionMessages errors = new ActionMessages(); errors.add("error2", new ActionMessage("error.transaction.token")); saveErrors(request, errors); return mapping.findForward("diary"); } // 处理表单...

    Struts API参考手册 PDF版本

    标题与描述均提到了"Struts API参考手册PDF版本",这意味着文档主要涵盖了Apache Struts框架的API细节,为开发者提供了全面的API使用指南。Apache Struts是一个开源的MVC(Model-View-Controller)框架,用于开发...

    struts 1.2上传下载全部实例

    - 在该方法中,首先检查文件名、用户名是否为空,以及文件大小是否超过限制(409600 字节),并使用 `ActionMessages` 存储错误信息。 - 使用 `FormFile` 对象(由 Struts 的上传组件提供)来获取上传文件的相关...

    struts1多国语言的实现

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

    struts2数据验证与国际化

    传统的方法包括在JSP页面或Servlet中进行验证,以及使用JavaScript进行前端验证。然而,这些方法往往不够灵活和易于维护。Struts2引入了自己的数据验证机制,这使得验证过程更加系统化和模块化。 Struts2的数据验证...

    Struts2&ActionError&ActionMessage&Demo

    4. **显示错误和消息**:在JSP页面中,使用Struts2的标签库(如`s:actionerror`和`s:actionmessage`)来遍历并显示`ActionContext`中的`ActionErrors`和`ActionMessages`。 ```jsp ()"&gt; ()"&gt; ``` 5. **处理...

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

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

    struts+Hibernate框架个人设计

    Struts提供了ActionError和ActionMessages机制来处理用户输入验证错误,而Hibernate的异常通常需要适当地转换并抛出给上层。 9. **国际化与本地化**:对于多语言环境,可以使用Struts的资源包(Properties文件)...

    Struts对国际化支持(国际化概念及具体操作详细讲解)

    ActionMessages messages = new ActionMessages(); messages.add("greeting", new ActionMessage("greeting")); saveErrors(request, messages); ``` 3. **在JSP中显示消息**:在JSP页面上,使用`&lt;fmt:message&gt;...

    北大青鸟 ACCP5.0 SSH总结

    - **服务器端验证**:ActionForm的validate()方法负责表单数据的格式验证,而Action的execute()方法则进行业务逻辑验证,错误信息通过ActionMessages保存并在JSP中展示。 #### 3.2 DynaActionForm和BeanUtils - **...

Global site tag (gtag.js) - Google Analytics