(转)再说ActionMessages类及其用法
转自:http://ahang8415.blog.163.com/blog/static/525291232008512111133947/
再说ActionMessages类及其用法
在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这样就可以达到输出自己指定属性的信息啦! |