`
johndoe
  • 浏览: 32252 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

ActionMessages类及其绑定的组件 转载

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


1 public void  add(String property, ActionMessage message) {

3         ActionMessageItem item =  (ActionMessageItem) messages.get(property);
4         List list = null ;

6         if (item == null ) {
7             list = new  ArrayList();
8             item = new ActionMessageItem(list, iCount++ , property);

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组件会对其进行访问和操作:

<html:errors>标签

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

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

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


<html:messages>标签

<html:messages>标签是用来在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集合中单个对象的标识,他和<logic:iterate>的id是同一个意思。

小实验:

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

1 ActionMessages messages = new ActionMessages();
2        
3 messages.add("", new ActionMessage("haha",false));
4        
5 this.saveMessages(request, messages);       
6
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) {
4
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。这样就可以达到输出自己指定属性的信息啦!

分享到:
评论

相关推荐

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

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

    Struts API参考手册 PDF版本

    ComponentDefinition和ComponentDefinitionsFactory是Struts框架中用于定义和管理组件的类。ComponentDefinition用于描述一个组件的配置信息,而ComponentDefinitionsFactory则负责根据这些定义创建和初始化组件实例...

    struts 1.2上传下载全部实例

    `FileAction` 类是 Struts 框架中的一个关键组件,它扩展了 `DispatchAction` 类,负责处理与文件上传和下载相关的业务逻辑。`DispatchAction` 是 Struts 提供的一个抽象类,用于处理不同的请求方法,使得在同一个 ...

    struts工作流程

    如果验证失败,会生成一系列的错误消息,这些错误消息会被封装在`ActionMessages`对象中,并且会返回到视图层显示给用户。 6. **执行Action**:一旦数据验证通过,`ActionServlet`会根据`ActionMapping`中的信息...

    Struts 1.1 API.zip

    这些类继承自`org.apache.struts.action.ActionForm`,并且可以与JSP中的表单元素进行绑定。 4. **配置文件**:Struts 1.1的配置主要通过两个XML文件进行:`struts-config.xml`和`web.xml`。前者定义了Action映射、...

    北大青鸟 ACCP5.0 SSH总结

    - **Model(模型)**:模型组件主要包含业务逻辑,通常是一个Java类,处理与数据库交互等操作。 - **View(视图)**:视图组件用于展示数据,通常由JSP页面完成,它从Model获取数据并显示给用户。 ### 2. Struts...

    Struts架构和标签库介绍

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

    Struts入门实践

    通过本篇内容的学习,我们不仅了解了 Struts 框架的基本概念及其核心组件的作用,还深入了解了如何利用这些组件实现简单的用户登录验证功能。Struts 的强大之处在于它为开发者提供了一套完善的框架,极大地简化了 ...

    Struts-config-xml

    每个`&lt;form-bean&gt;`元素定义了一个ActionForm类,它将HTTP请求参数绑定到Java对象上。ActionForm对象在请求处理过程中被创建、填充并传递给Action类。配置通常包括表单名称、类名以及其他属性。这些配置允许Struts在...

    struts 整合笔记

    - 定义了路径 `/login` 对应的 Action 类及其转发页面 `/login.jsp`。 - 特殊情况处理:未知请求处理 (`unkown="true"`)。 #### 总结 Struts 框架提供了一种简洁而强大的方式来构建企业级 Web 应用程序。通过...

    Struts API官方英文版

    Struts API是Struts框架的核心组件,提供了一系列接口和类,使得开发者能够有效地与框架交互,实现业务逻辑和视图的分离。 1. **Model部分**:在Struts中,模型通常由业务逻辑组件(如EJB或POJOs)组成,它们负责...

    Struts 1.3.8 学习笔记(六)

    Action 类是处理用户请求的主要组件,它继承自 org.apache.struts.action.Action 类。开发者需要在 Action 类中定义执行业务逻辑的方法,并返回一个 ActionForward 对象,指示框架如何跳转到下一个视图(JSP 页面)...

    Struts记录整理文档

    本文档将深入讲解Struts中的`ActionErrors`和`ActionMessages`,以及如何在页面上显示这些错误和消息。 1. **ActionErrors**: `ActionErrors` 是 Struts 提供的一个用于收集和存储错误信息的容器。在上述代码中,...

    struts 1.2 文件上传与下载.txt

    ActionMessages messages = new ActionMessages(); boolean flag = true; if (fileForm.getName().equals("")) { flag = false; messages.add("nameerror", new ActionMessage("name.error")); } if ...

    Java Struts 教程

    MVC模式是软件工程中常用的设计模式,将应用程序分为三个主要组件:Model(模型)负责业务逻辑,View(视图)负责展示数据,Controller(控制器)处理用户输入并协调模型和视图之间的交互。 3. **Struts工作原理**...

    Strutssource源码

    8. **异常处理**:在`org.apache.struts.action`包下,可以看到ActionError和ActionMessages类,它们用于处理和展示应用程序运行时的错误信息。Struts框架提供了一套完整的异常处理机制,可以在struts-config.xml中...

    struts1学习的一个登录验证的例子

    ActionMessages errors = new ActionMessages(); errors.add("login", new ActionMessage("error.login")); saveErrors(request, errors); return mapping.findForward("error"); } } ``` 在这个例子中,`...

    Struts2用validate方法进行表单验证

    在Struts2中,表单验证主要依赖于两个核心组件:Action类和Validator框架。Action类是业务逻辑的载体,而Validator框架则负责验证工作。当用户提交表单时,请求会路由到对应的Action类,此时我们可以在Action类中...

    struts1架构登录代码

    这个项目,名为“StrutsLoginDemo”,将展示如何在Struts1框架下实现用户登录功能,包括ActionForm和Action两个关键组件。 **ActionForm**是Struts1中的表单类,用于接收和封装用户从JSP页面提交的数据。在登录场景...

    Struts2-ActionError-ActionMessage-Example

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

Global site tag (gtag.js) - Google Analytics