首页 > 其他分享 >深入探讨struts的ActionMessages消息机制

深入探讨struts的ActionMessages消息机制

时间:2023-06-15 11:03:28浏览次数:53  
标签:struts false ActionMessage Object 深入探讨 key message ActionMessages


 深入探讨struts的ActionMessages消息机制 
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://leaze.blog.51cto.com/83088/51750   

在介绍ActionMessages前,我觉得有必要先介绍一下ActionMessages的数据结构.理解了其数据结构有助于理解相关的各种操作.
    ActionMessages以一个HashMap存储ActionMessage.Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage存储在List中.也就是说key标识了一组ActionMessage.
    先介绍涉及到的类中的几个常用方法,然后给出几个示例代码,帮助理解.
ActionMessage
ActionMessage(String key)
该方法接受一个字符串,字符串是在资源文件种配置的key值,必须在配置文件中进行相关配置.
ActionMessage(String key,Object value)
ActionMessage(String key,Object value0,Object value1)
ActionMessage(String key,Object value0,Object value1,Object value2)
ActionMessage(String key,Object value0,Object value1,Object value2,Object value3)
上面4个方法第一个参数同样是资源文件中配置的key值,同样必须在配置文件中进行相关配置.后面的参数为资源文件中key所对应的信息中需要的参数
ActionMessage(String key,Object[] values)
这种方法第一个参数同上,第二个参数接受一个Object数组,其中保存key在资源文件中对应信息需要的参数.
ActionMessages
ActionMessages.add(String property,ActionMessage message)
第一个参数property对应于<html:messages>标签中的property属性,具体使用方法在后面介绍. property的值一般采用ActionMessages类中的静态常量ActionMessages.GLOBAL_MESSAGE,也可以自己定义一个key.该方法执行时,先判断ActionMessages中有没有该key,如果没有就新添加对key-List键值对;如果有同样的key,就先获取该key对应的Value并转换为List对象,然后将(ActionMessage)message添加进List对象中.
ActionMessages.add(ActionMessages ams)
该方法将参数中保存的ActionMessage合并到调用ActionMessages中.
Action及其所有子类
addMessages(HttpServletRequest request,ActionMessages messages)
该方法首先检查request对象中是否有ActionMessages对象,如果有对象,则将接收的ActionMessages合并到request中,如果没有,用setAttribute(Globals.MESSAGE_KEY,messages)方法将messages添加进去.如果一个Action中需要显示多条错误信息,推荐使用该方法.(Globals.MESSAGE_KEY = "org.apache.struts.action.ACTION_MESSAGE")
saveMessages(HttpServletRequest request,ActionMessages messages)
该方法保存messages时,如果request中已经有一个ActionMessages对象,则用新的覆盖原有的.不推荐使用该方法,该方法容易发生丢失信息的情况.
addErrors()和saveErrors()
这两个方法与addMessages()和saveMessages()相似,不过在HttpServletRequest.setAttribute()时的参数不一样,这两个方法是:setAttribute(Globals.ERROR_KEY,messages)添加的.(Globals.ERROR_KEY = "org.apache.struts.action.ERROR")
           在request中添加的ActionMessages在页面显示时,用<html:messages>标签进行显示,下面介绍一下该标签和经常配套使用的<logic:messagePresent>标签.
          <html:messages> id  必须指定id属性.<html:messages>标签作用是遍历ActionMessages对象中的所有    ActionMessage.类似<logic:iterator>,每次循环都定义一个名称为id指定的页面范围的bean,然后用    <bean:write>标签进行输出.
 bundle  绑定一个MessageResources,不指定的时候从上下文中配置的资源中检索.一般不指定bundle属性.
 locale  指定本地化信息,不指定时和Session的本地化信息相同,一般不用指定.
 name  指定ActionMessages对象在request中的key.不指定时,默认用      GLOBALS.ERROR_KEY="org.apache.struts.action.ERROR",用Action.addMessages()方法添加的信息将不    被显示,用Action.addErrors()方法添加的信息才会被显示.一般不指定.
 property  指定哪些ActionMessage将被显示,与ActionMessages.addMessage(String property,ActionMessage am)中的property参数相对应.不指定的时候显示所有信息.
 header  指定一个资源信息key,在显示ActionMessages前打印到页面上,可选.
 footer  指定一个资源信息key,在显示完ActionMessages后打印到页面上,可选.
 message 取值为true/false,默认为false.为false或不指定时,在request中查找key=Globals.ERROR_KEY的ActionMessages bean.当该属性设置为true时,在request中查找key=Globals.MESSAGE_KEY的ActionMessages bean,同时name属性的值将被忽略.

 
         <logic:messagesPresent>和<logic:messagesNotPresent>标签,只支持message,name,property3个属性,作用和<html:messages>相同,就不再介绍

下面给出一段代码,帮助大家理解,这里只写了关键代码.
1. Action 类中的部分代码:

ActionMessages ams = new ActionMessages(); 
    ams.add(ActionMessages.GLOBAL_MESSAGE,
                              new ActionMessage("addMessages : global message",false)); 
    ams.add("error",new ActionMessage("addMessages : error message",false)); 
    ams.add("info",new ActionMessage("addMessages : info message",false)); 
    this.addMessages(httpServletRequest,ams);     ActionMessages errorMessage = new ActionMessages(); 
    errorMessages.add(ActionMessages.GLOBAL_MESSAGE,
                              new ActionMessage("addErrors : global message",false)); 
    errorMessages.add("error",
                              new ActionMessage("addErrors : error message",false)); 
    errorMessages.add("info",new ActionMessage("addErrors : info message",false)); 
    this.addErrors(httpServletRequest,errorMessages);

2.  JSP文件中的部分代码:
 

<html:messages id="message"> 
  <bean:write name="message"/> 
  <br/> 
</html:messages> 
<!-- 上面代码的输出结果: 
  addErrors : global message 
  addErrors : error message 
  addErrors : info message 
--> <html:messages id="message" property="info"> 
  <bean:write name="message"/>
  <br /> 
</html:messages> 
<!-- 这段代码的输出结果为: 
  addErrors : info message 
-->   
<html:messages id="message" message="true"> 
  <bean:write name="message"/> 
  <br /> 
</html:messages> 
<!-- 这段代码的输出结果: 
  addMessages : global message 
  addMessages : error message 
  addMessages : info message 
--> <html:messages id="message" message="true" property="info"> 
  <bean:write name="message"/> 
  <br />
</html:messages> 
<!-- 这段代码的输出结果为: 
  addMessages : info message 
-->

        如果结合上<logic:messagesPresent>标签,将可以做出自由度很高的错误信息显示效果,具体如何表现这里就不在细说了.<logic:messagePresent>的使用方法大家自己体会,我相信大家掌握了<html:messages>,一定能驾驭<logic:messagesPresent>
        对struts的ActionMessages的讨论就到这里,希望这篇文章能对广大刚接触struts的朋友们有所帮助.

标签:struts,false,ActionMessage,Object,深入探讨,key,message,ActionMessages
From: https://blog.51cto.com/u_16065168/6485355

相关文章

  • 深入探讨go语言开发的技术特点及其应用
    一、引言Go语言,又称Golang,是Google于2007年发布的一种静态类型、编译型语言。它融合了众多语言的优点,具有高效、安全、简洁等特点,迅速在开发领域崭露头角。本文将深入探讨go语言开发的技术特点及其应用,以期为相关领域的研究和实践提供参考。二、Go语言的技术特点简洁高效:Go语言的语......
  • struts(il8n) 实现国际化的一个例子
    struts(il8n)实现国际化的一个例子[code]struts利用在session中放一个local对象来达到设置当前语言您的目的,默认的情况下,struts根据网页向后台提交时所包含的编码信息来提供缺省的local对象。这就是我们为什么可以通过更改网页显示语言设置,就能显示不同......
  • struts2 intercepter简单例子
    玩了一天终于把struts2的intercepter搞明白了,有那么点小兴奋,呵呵。下面把俺的成果分享一下:1.在注册页面中(index.jsp)注册一下:  <%session.setAttribute("user","lzw");%>2.在登录界面(login.jsp)登录:<formaction="login.action"method="post"><......
  • 深入探讨源码-HashMap
    又聊到HashMap了,其实网上已经有很多关乎HashMap的文章了,本文将对HashMap的实现方式和一些关键点进行一一的说明,仅限个人理解,如有疑惑和问题,请联系作者更正。说明:JDK版本1.8.0_151HashMapHash表是一个数组+链表的结构,这种结构能够保证在遍历与增删的过程中,如果不产生hash碰撞,仅需一......
  • 关于struts中的ActionError和ActionMessage的占位符{0}的使用
    先说说ActionError,  一般的情况下我们会自己写的ActionForm的validate方法来对提交过来的表单做验证 开始的时候我也是在想这个仅仅是return了一个ActionErrors 这里是我的form源码packagecom.little.struts.form;publicclassHelloFormextendsActionForm{private......
  • struts的ActionErrors和ActionMessage写法
    我在Action中的ActionErrors的实例中add了一系列的ActionError, 在JSP中用<html:errors/>显示,但什么都没有! 是不是ActionErrors.add("abc", ActionError)中的第一个字符串“abc”要添加在什么资源文件里呀?怎么建立资源文件,怎么添加?怎么显示? 我非常迷惑,请各位赐教,谢谢!   A......
  • struts2,Jboss
                    ......
  • Struts2实例
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@taglibprefix="s"uri="/struts-tags"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitio......
  • 使用JPA+Struts2+Spring 在 google Appengine开发应用
    本文同时发表在我在googleAppengine上的搭建的博客:[url]http://blogfor11lu.appspot.com/articleaction_view.action?article.id=agtibG9nZm9yMTFsdXIPCxIHQXJ0aWNsZRjBtQMM[/url]之前用JDO和Struts2在googleAppengine上试着写了一个简单的blog程序,但我还是希望使用Spring......
  • 渗透测试-struts2攻防环境搭建拿shell
    一、下载Jspstudy打开目录D:\JspStudy\tomcat\webapps二、打开struts2并进行拿shell1.打开struts2在浏览器中输入网址http://localhost:8080/struts2-showcase/showcase.action点击上面的Configuration,点击ActionChaining点击上面的Configuration,点击ActionChaining点击......