struts中<html:messages>标签的使用
来源:互联网 发布:郜艳敏事件知乎 编辑:程序博客网 时间:2024/06/05 02:44
在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= newArrayList();
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= newArrayList();
再将内容添加到当中去。总的来说,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;
newActionMessage( "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 returnnew 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 newActionForward( "/form/hello.jsp ");
然后在JSP页面中指定name属性,而将message设为false就可以了:
2 <bean:write name="a"/>
3 </html:messages>
这里是直接省略了message属性,因为他的缺省值就是false。这样就可以达到输出自己指定属性的信息啦!
- struts中<html:messages>标签的使用
- struts 标签 HTML:MESSAGES 使用范例
- HTML中使用struts标签的方法
- struts中html:options标签的使用
- html:messages的使用
- struts 标签 HTML:MESSAGES和HTML:ERRORS 用法简例
- Struts中html标签
- 使用Struts提供的HTML标签库
- 使用Struts提供的HTML标签库
- 使用 Struts 提供的 HTML 标签库
- 使用 Struts 提供的 HTML 标签库
- Struts -- html:link 标签的使用
- 【struts】html:errors标签的使用
- Struts -- html:link 标签的使用(转)
- Struts html标签的使用及说明
- struts中html:select标签和html:options 的使用(转)
- 关于html:errors与html:messages标签的问题
- [转][struts]标签 HTML:MESSAGES和HTML:ERRORS用法简例
- 如何更改 navigation bar 或者 tab bar 的背景图片
- VRML基础知识
- python itertools模块学习
- 网络管理软件封锁视频网站
- 写个发布iOS app的过程,供参考。
- struts中<html:messages>标签的使用
- subversion服务器作为服务启动
- ajax检测用户名
- 关于iOS app的设备方向支持的问题
- Python Library: itertools
- MongoDB vs Redis vs Tokyo Tyrant
- 迫不及待的和大家分享iOS下的正则表达式类库的心得!
- Oracle 异常 ORA-01861: literal does not match format string(字符串格式不匹配)
- JS与Flex交互的几点注意事项