在ActionMessages中包含着一个HashMap,其中的key就是add方法的property参数,然而他的值对应的是一个ActionMessageItem,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 }
< 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>标签
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中。
1
<
html:messages id
=
"
a
"
message
=
"
true
"
>
2 < bean:write name = " a " /> 3 </ html:messages > 上面代码设置了message属性,表示从Globals.MESSAGE_KEY中获取信息,前面也有提到,此时指定name属性是无效的。
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。这样就可以达到输出自己指定属性的信息啦! |
再说ActionMessages类及其用法
最新推荐文章于 2023-12-26 11:34:24 发布