ActionMessages<转>

ActionMessages其实就是一个用于存储ActionMessage的HashMap,Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage都存储在List中。也就是说,key标识了一组ActionMessage。
下面先介绍下ActionMessages消息机制涉及到的一些类:
org.apache.struts.action.ActionMessage
org.apache.struts.action.ActionMessages
org.apache.struts.action.Action及其子类
  • 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在资源文件中对应信息需要的参数.
    • getKey()
      返回ActionMessage的key,返回类型:String。
    • getValues()
      返回ActionMessage中设定的资源文件参数,返回类型:Object[]。
  • ActionMessages
    • ActionMessages()
      构造方法1:构建一个空的ActionMessages。
    • ActionMessages(ActionMessages ams)
      构造方法2:构建一个新的ActionMessages,并将ams合并到新的ActionMessages中。
    • add(String property, ActionMessage message)
      第一个参数property对应于<html:messages>标签中的property属性,具体使用方法在后面介绍。property的值一般采用ActionMessages类中的静态常量ActionMessages.GLOBAL_MESSAGE(ActionMessages.GLOBAL_MESSAGE="org.apache.struts.action.GLOBAL_MESSAGE"),也可以自己定义一个key作为property值。该方法执行时,先判断ActionMessages中有没有该key,如果没有就新添加key-List键值对;如果有同样的key,就先获取该key对应的Value并转换为List对象,然后将ActionMessage添加进List对象中。
    • add(ActionMessages ams)
      该方法将参数中的ActionMessages合并到调用ActionMessages中。
    • clear()
    • isEmpty()
    • isAccessed()
      是否已将ActionMessages存入request中。
    • size()
      存于ActionMessages中的ActionMessage的数量。
    • size(String property)
      ActionMessages中property键对应的List中的ActionMessage的数量。
    • properties()
      返回ActionMessages的所有key,并存于Iterator中。
    • get()
      返回存于ActionMessages中的所有ActionMessage,并存于Iterator中。
    • get(String property)
      返回ActionMessages中property键对应的List中的所有ActionMessage,并存于Iterator中。
  • Action及其子类
    • saveMessages(HttpServletRequest request, ActionMessages messages)
      该方法使用setAttribute(String org.apache.struts.Globals.MESSAGE_KEY, ActionMessages messages)方法将messages存入request中(org.apache.struts.Globals.MESSAGE_KEY = "org.apache.struts.action.ACTION_MESSAGE") ,如果request中已经有一个ActionMessages对象, 则用新的覆盖原有的. 不推荐使用该方法, 该方法容易发生丢失信息的情况,推荐使用addMessages。
    • saveMessages(HttpSession session, ActionMessages messages)
    • addMessages(HttpServletRequest request, ActionMessages messages)
      该方法首先检查request对象中是否有ActionMessages对象, 如果有, 则将接收的ActionMessages合并到request中;如果没有, 就用setAttribute(String org.apache.struts.Globals.MESSAGE_KEY, ActionMessages messages)方法将messages添加进去. 如果一个Action中需要显示多条错误信息, 推荐使用该方法。
    • getMessages(HttpServletRequest request)
      获取存于request中的ActionMessages对象。
    • saveErrors(HttpServletRequest request, ActionMessages messages)
      saveErrors(HttpSession session, ActionMessages messages)
      addErrors(HttpServletRequest request, ActionMessages messages)
      getErrors(HttpServletRequest request)
      上面4个方法用法与之前4个方法相似,不同的是:在调用setAttribute(String key, ActionMessages messages)方法时,参数key的值不同,这里的key是org.apache.struts.Globals.ERROR_KEY,值为:"org.apache.struts.action.ERROR"。相应地,在视图层对<html:messages>或<html:errors>的使用也会有所不同,详细用法后面介绍。
在request中添加的ActionMessages可在视图层用<html:messages>或<html:errors>标签显示,还可以配合<logic:messagesPresent>或<logic:messagesNotPresent>标签一起使用。
1. <html:messages>
id必须指定id属性。<html:messages>标签作用是遍历ActionMessages对象中的所有ActionMessage. 类似<logic:iterator>,每次循环都定义一个名称为id指定的页面范围的bean,然后用<bean:write>标签进行输出.
message:取值为true/false,默认为false.为false或不指定时,在request中查找key=org.apache.struts.Globals.ERROR_KEY的ActionMessages bean.当该属性设置为true时,在request中查找key=org.apache.struts.Globals.MESSAGE_KEY的ActionMessages bean,同时name属性的值将被忽略.
property:指定哪些ActionMessage将被显示,与ActionMessages.addMessage(String property,ActionMessage am)中的property参数相对应.不指定的时候显示所有信息.
header:指定一个资源信息key,在显示ActionMessages前打印到页面上,可选.
footer:指定一个资源信息key,在显示完ActionMessages后打印到页面上,可选.
name:指定ActionMessages对象在request中的key.不指定时,默认用org.apache.struts.Globals.ERROR_KEY="org.apache.struts.action.ERROR",用Action.addMessages()方法添加的信息将不被显示,用Action.addErrors()方法添加的信息才会被显示.一般不指定.
locale:指定本地化信息,不指定时和Session的本地化信息相同,一般不用指定.
bundle:绑定一个MessageResources,不指定的时候从上下文中配置的资源中检索.一般不指定bundle属性.
 
2. <html:errors>
只显示Action.addErrors, Action,saveErrors方法保存的值,不显示Action.addMessages, Action,saveMessages方法保存的值。没有id属性,直接显示。
property:指定哪些ActionMessage将被显示,与ActionMessages.addMessage(String property,ActionMessage am)中的property参数相对应.不指定的时候显示所有信息.
header:指定一个资源信息key,在显示ActionMessages前打印到页面上,默认值errors.header,可选.
footer:指定一个资源信息key,在显示完ActionMessages后打印到页面上,默认值errors.footer,可选.
name:指定ActionMessages对象在request中的key.不指定时,默认用org.apache.struts.Globals.ERROR_KEY="org.apache.struts.action.ERROR",一般不指定.
prefix:指定一个资源信息key,在显示每条ActionMessage前打印到页面上,可选.
suffix:指定一个资源信息key,在显示每条ActionMessage后打印到页面上,可选.
locale:指定本地化信息,不指定时和Session的本地化信息相同,一般不用指定.
bundle:绑定一个MessageResources,不指定的时候从上下文中配置的资源中检索.一般不指定bundle属性.
 
3. <logic:messagesPresent>和<logic:messagesNotPresent>
这2个标签只支持message,property,name三个属性,作用和<html:messages>相同。

ActionMessages使用简单示例:
1. Action 类中:
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
ActionMessages msg=new ActionMessages();
msg.add("NullUserName", new ActionMessage("user.null","UserName"));
msg.add("NullUserPsd", new ActionMessage("user.null","Password"));
addErrors(request, msg);
msg.clear();
msg=null;
 
2. properties资源文件中:
user.null={0} is null!!!

3. JSP文件中:
<html:errors />
 
显示结果:
UserName is null!!! Password is null!!!
 
addErrors(request, msg)改为 addMessages(request, msg),JSP文件中的代码改为:
<html:messages id="m" message="true">
<bean:write name="m" /><br/>
</html:messages>
则显示结果为:
UserName is null!!!
Password is null!!!

你可能感兴趣的:(message)