读书人

ActionMessages的应用

发布时间: 2012-10-25 10:58:57 作者: rapoo

ActionMessages的使用

原来都是一直用struts1.1,所以一直以来都用ActionErrors,今天自己做了点东东,想用struts1.2了,但是它又不提倡用ActionErrors,只能转为ActionMessage了.就学了点..留下来...仅供以后参考... ? 1.在建struts时里面的struts-config.xml里面需要加入 <message-resources parameter="ApplicationResources" />如果你想用到这个配置文件读数据的话...当然可以不用,直接在类里写入要输出的文字也可.ApplicationResources这个文件放在src目录下叫ApplicationResources.properties.......在ApplicationResources文件里加入一条记录:errors.user.login=error,error,error!!
? 2.在struts的action里加入
? ? ActionMessages messages = new ActionMessages();
? ? messages.add("errorMsg", new ActionMessage("errors.user.login"));
? ? addMessages(request, messages);
   原先以为和ActionErrors类似是saveMessage这样的方法的,可是一直尝试在页面就是显示不出我要的数据,在网上查找了一会发现有人用addMessages方法,就拿来试试,结果真的就显示了...
 3.页面代码显示:
    <html:messages message="true" property="errorMsg"> ? ?
? ? ? ? <bean:write /> ?
? ? </html:messages>
    有用html:messages标签来显示...
    <html:messages>的message属性如果设定为true,会输出ActionMessages中所储存的讯息,Message表示一个提示讯息,也许使用者输入了不正确的资讯,例如在输入名称与密码时打错了字,程式要提示使用者他们输入了不正确的讯息。
    <html:messages>的message属性如果不设定为true,会输出ActionErrors中所储存的讯息,Error代表的是一个操作方面的错误,例如错误操作导致使用者名称或密码为空(当然也许也是故意的)。
  以上的三步就可以实现ActionMessages的显示了...
? 但是ActionMessages还有一些更好功能,虽然还没有用到,但是在网上发现了先贴上以后可以用到:
  有人会问,错误信息只能存放在资源文件中吗,其实不是这样。不需要资源文件也可以产生错误信息。
  我们再来看一下ActionMessage的另一种构造方法:
  ActionMessage(String key,boolean isresource)
  如果isresource值为true,则表示key是资源文件中的key,产生的消息就是与key相对应的消息
  如果isresource值为false,则表示key为一条普通的消息。
  如果上面的error.add改为error.add("testerror",new ActonMessage("这是一条自定义消息",false",));那么页面上显示的将是:这是一条自定义消息.
  另外还可以用ActionMessage产生复合消息,比如我们要输出:xxx不能用作用户名,其中xxx是一个变量。
  首先我们在资源文件中加一个条复合消息
  testmsg = {0}不能用作用户名。这里{0}是要被替换的参数。
  我们再来看一下ActionMessage的另一中构造方法
  ActionMessage(String key,Object value0);
  也就是说用value0的值来替换{0}
  我们修改error.add为error.add("testerror",new ActonMessage("testmsg",""))
  那么JSP页面上将显示:不能用作用户名。
  当然在一条复合消息中也可带多个参数,参数依次为{0},{1},{2}或更多
  例如:loginUser = 用户名:{0} 姓名:{1} 登录次数:{2}.....
  那么在产生错误消息时就用new ActionMessage(String key,Object value0,Object value1,Object value2.....)或者使用对象数组new ActionMessage(String key,Object[] values)
  String[] detail = {"Admin","王晶","12"};
  error.add("testerror",new ActionMessage("loginUser",detail));

在介绍ActionMessages前,我觉得有必要先介绍一下ActionMessages的数据结构.理解了其数据结构有助于理解相关的各种操作.
? ActionMessages以一个HashMap存储ActionMessage.Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage存储在List中.也就是说key标识了一组ActionMessage. ? 先介绍涉及到的类中的几个常用方法,然后给出几个示例代码,帮助理解.

读书人网 >软件架构设计

热点推荐