- 浏览: 516800 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
在ActionMessages中包含着一个HashMap,其中的key就是add方法的property参
数,然而他的值对应的是一个ActionMessageItem,ActionMessageItem是该类的一个内部类,当中包含了一个
ArrayList。
由此可见,一个property中可以包含着多个ActionMessage,这些ActionMessage都将保存在
ActionMessageItem的ArrayList中。
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组件会对其进行访问和操作:
<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 key = " ch " parameter = " com.kook.struts.ApplicationResources_ch " />
< message - resources key = " en " parameter = " com.kook.struts.ApplicationResources_en " />
对应的add方法如下:
2 if (name == null || name.length() < 1 )
3 {
4 errors.add( " name " , new ActionMessage( " kong " ));
5 }
6 return errors;
new ActionMessage( " kong " )对应在key="en"的资源文件中为:
JSP中的<html:errors>标签:
这时候将会输出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方法中添
加如下代码:
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 方法的源代码:
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页面的显示
代码为:
2 < bean:write name = " a " />
3 </ html:messages >
上面代码设置了message属性,表示从Globals.MESSAGE_KEY中获取信息,前面也有提到,此时指定name属性是无效的。
那
如果我想只显示我自己指定的信息怎么办呢?
我们可以不使用saveMessages方法而使用最原始的办法,通常最原始的办法也是最有效
的,Struts其实是封装了许多最原始的实现。我们先将action中的代码改为:
messages.add( "" , new ActionMessage( " haha " , false ));
request.setAttribute( " show " , messages);
return new ActionForward( " /form/hello.jsp " );
然后在JSP页面中指定name属性,而将message设为false就可以了:
2 < bean:write name = " a " />
3 </ html:messages >
这里是直接省略了message属性,因为他的缺省值就是false。这样就可以达到输出自己指定属性的信息啦!
发表评论
文章已被作者锁定,不允许评论。
-
struts1标签库
2016-09-27 10:17 3101、Bean标签库Bean标签库 ... -
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7381) 在Action实现类方面 ... -
checkbox 和 multibox
2010-07-25 20:44 11731.checkbox 在formbean的属性最好是用St ... -
struts2 study
2010-06-22 09:55 830转自 http://www.iteye.com/topic/6 ... -
actionMessages 2
2010-06-11 14:33 899<html:html>标签 属性的作用: la ...
相关推荐
1、struts国际化的配置 ... 理解ActionMessage和ActionMessages两个对象的区别 如何传递国际化消息? * 调用saveMessage()传递普通消息 如何显示国际化消息? 通过标签显示消息(可以显示普通消息和错误消息)
本文档将深入讲解Struts中的`ActionErrors`和`ActionMessages`,以及如何在页面上显示这些错误和消息。 1. **ActionErrors**: `ActionErrors` 是 Struts 提供的一个用于收集和存储错误信息的容器。在上述代码中,...
ActionMessages messages = new ActionMessages(); messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("success.message")); saveErrors(request, messages); ``` `success.message`对应资源文件...
ActionMessages messages = new ActionMessages(); messages.add("error", new ActionMessage("registration.error.email.exists")); saveErrors(request, messages); return mapping.findForward("input"); } ...
ActionMessages messages = new ActionMessages(); ``` - **添加错误信息:** - 向`ActionMessages`对象中添加错误信息。 - 示例代码: ```java messages.add("loginFailed", new ActionMessage("error.login...
ActionMessages messages = new ActionMessages(); messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("view.success")); this.saveMessages(request, messages); ``` 在国际化配置文件(如`...
ActionMessages errors = new ActionMessages(); errors.add("error2", new ActionMessage("error.transaction.token")); saveErrors(request, errors); return mapping.findForward("diary"); } // 处理表单...
ActionMessages errors = new ActionMessages(); errors.add("globalError", ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.loginFailed")); saveErrors(request, errors); ``` 在JSP页面中: ```...
3. **国际化支持**:为了实现国际化,你需要为每种语言创建一个对应的资源文件,如`ActionMessages_en.properties`(英语)、`ActionMessages_fr.properties`(法语)等。Struts2会根据用户的浏览器设置自动选择正确...
ActionMessages用于存储成功的信息或提示信息,而ActionErrors则用于存储错误信息。这些信息可以在Action执行后被传递给视图层,以便向用户展示。 ### ActionServlet ActionServlet是Struts框架的前端控制器,它是...
ActionMessages messages = new ActionMessages(); ActionMessage am = new ActionMessage("LogonAction.fail.userId", userId); messages.add("userId", am); // 添加密码错误消息 am = new ActionMessage(...
ActionMessages messages = new ActionMessages(); messages.add("info", new ActionMessage("label.welcome")); saveErrors(request, messages); ``` 然后在JSP页面中,通过`<logic:messagesPresent>`标签显示这些...
例如,以下配置将所有`InvalidLogin`类型的异常转发到`/error.jsp`页面,并在请求范围内存储ActionMessages: ```xml key="global.error.invalidlogin" path="/error.jsp" scope="request" type="struts....
- 在该方法中,首先检查文件名、用户名是否为空,以及文件大小是否超过限制(409600 字节),并使用 `ActionMessages` 存储错误信息。 - 使用 `FormFile` 对象(由 Struts 的上传组件提供)来获取上传文件的相关...
- 在ActionForm中,我们可以使用`ActionMessages`对象来收集和显示错误或提示消息。这些消息可以在资源文件中定义,然后通过`getText()`方法获取。 5. **设置用户首选语言** - 用户的首选语言通常通过HTTP请求头...
4. **显示错误和消息**:在JSP页面中,使用Struts2的标签库(如`s:actionerror`和`s:actionmessage`)来遍历并显示`ActionContext`中的`ActionErrors`和`ActionMessages`。 ```jsp ()"> ()"> ``` 5. **处理...
ActionMessages errors = new ActionMessages(); errors.add("login", new ActionMessage("error.login")); saveErrors(request, errors); return mapping.findForward("error"); } } ``` 在这个例子中,`...
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.validate.number")); } if (!this.isDouble(myForm.getSecondNumber())) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(...
ActionMessages errors = new ActionMessages(); errors.add("error", new ActionMessage("login.error")); saveErrors(request, errors); return mapping.findForward("failure"); } } // 假设的验证方法,...