自由飞翔

我在仰望,java之上

统计

留言簿(2)

我关注的blog

阅读排行榜

评论排行榜

ActionMessage与ActionError

参考文章:http://hi.baidu.com/develop_skill/blog/item/e09b2d8664cddf2dc75cc36b.html

 如果是想获取error的话,name = org.apache.struts.action.ERROR
 如果是想获取message的话, name = org.apache.struts.action.ACTION_MESSAGE

1.src目录下新建属性文件HtmlErrors.properties,里面有一些key=walue
2.
在struts-config.xml中加入 <message-resources key="HtmlErrors" parameter="HtmlErrors"/>
3.
在action类中声明ActionMessages 属性,并且在setServlet方法 中初始化之 messages = new ActionMessages();
在execute中,添加message:
messages.add("message",new ActionMessage("key")); this.saveErrors(request,messages);//注意此处必须是saveErrors,用saveMessages无效
4.
在jsp文件中加入:
<logic:messagesPresent> <html:errors property="message" bundle="HtmlErrors"> </html:errors> </logic:messagesPresent>

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在资源文件中对应信息需要的参数.
    • ActionMessage(String msg,false 这个方法显示自定义消息,即消息输出内容为msg。
  • 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>标签进行显示, <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属性的值将被忽略. 
注:true显示 this.addMessages(request,messages); 里面的消息,
false显示 this.addErrors(request, messages)的消息。

 <html:messages>的message属性如果设定为true,会输出ActionMessages中所储存的讯息,Message表示一个提示讯息,也许使用者输入了不正确的资讯,例如在输入名称与密码时打错了字,程式要提示使用者他们输入了不正确的讯息。 
    <html:messages>的message属性如果不设定为true,会输出ActionErrors中所储存的讯息,Error代表的是一个操作方面的错误,例如错误操作导致使用者名称或密码为空(当然也许也是故意的)。

示例:(struts 1.3)

ActionForm中:

ActionMessages messages = new ActionMessages();
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("messages.username.required"));
    addMessages(request,messages);
   
    ActionErrors errors = new ActionErrors();
    errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.username.required"));
    addErrors(request,errors);
   
    return mapping.getInputForward();

===========================================================================

JSP页面显示:

<html:messages id="outMessage" message="true" header="messages.header" footer="messages.footer">
    <bean:write name="outMessage"/>
   </html:messages>
   <html:messages id="outError" message="false" header="errors.header" footer="errors.footer">
    <bean:write name="outError"/>
   </html:messages>

============================================================================

ApplicationResources.properties配置文件:

messages.header=<h2><font color="red">
messages.footer=</font></h2>
messages.username.required=ActionMessage:the name is null

errors.header=<h2><font color="blue">
errors.footer=</font></h2>
errors.username.required=ActionError:the name is null




Gavin

posted on 2011-09-29 11:59 GavinMiao 阅读(1209) 评论(0)  编辑  收藏 所属分类: struts1


只有注册用户登录后才能发表评论。


网站导航: