`
john.zhang
  • 浏览: 16335 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ActionMessage&&ActionErrors介绍 .

    博客分类:
  • java
 
阅读更多

在介绍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的朋友们有所帮助.  
分享到:
评论

相关推荐

    Struts2&ActionError&ActionMessage&Demo

    4. **显示错误和消息**:在JSP页面中,使用Struts2的标签库(如`s:actionerror`和`s:actionmessage`)来遍历并显示`ActionContext`中的`ActionErrors`和`ActionMessages`。 ```jsp ()"&gt; ()"&gt; &lt;s:actionmessage/...

    Struts2-ActionError-ActionMessage-Example

    ActionErrors errors = new ActionErrors(); errors.add("username", new ActionError("errors.username.required")); ActionContext.getContext().getValueStack().push(errors); ``` - 显示错误:在JSP页面上...

    struts_注册验证_ActionErrors

    errors.add("username", new ActionMessage("error.username.empty")); } // 验证邮箱 // ... return errors; } ``` 如果验证失败,`ActionErrors`会被添加相应的错误消息。然后在Action的`execute()`方法中...

    struts 国际

    3. **ActionMessage和ActionErrors**:Struts提供了`ActionMessage`和`ActionErrors`类,它们分别用于存储成功的消息和错误消息。这些消息可以从资源包中获取,并在视图层显示。 4. **Tiles和FreeMarker模板**:在...

    struts1.x 最简洁国际化 源代码

    - `ActionMessage`和`ActionErrors`是Struts1用来处理和显示错误消息和一般消息的对象。它们可以从资源包中获取,允许开发者将消息文本与实际代码分离,方便国际化。 4. **Struts标签库**: - Struts1提供了一套...

    Struts对国际化支持(国际化概念及具体操作详细讲解)

    3. **使用ActionMessage和ActionErrors**:在Action类中,你可以使用`ActionMessage`和`ActionErrors`对象来收集和传递消息。这些对象会自动与对应的资源文件关联。 4. **JSP页面显示**:在JSP页面上,可以使用`...

    关于struts表单验证

    在处理验证错误时,如果`validate()`方法返回的ActionErrors对象包含ActionMessage,Struts会将请求转发到struts.xml配置文件中`&lt;action&gt;`元素的`input`属性指定的资源。这样,用户可以看到错误消息,并有机会更正...

    Struts记录整理文档

    例如,`messages.add("name", new ActionMessage("error.name.required"));`中的`name`键需要在页面上对应的`property`属性中使用,如`&lt;html:messages property="name"/&gt;`。 6. **ActionMessages与ActionErrors的...

    struts中ActionForm的validate方法使用小得

    这样,如果验证失败,ActionErrors就会包含至少一个ActionMessage,从而导致请求不会继续执行Action的`execute`方法,而是根据`struts-config.xml`中的配置跳转到预设的错误处理页面,如"reg.jsp"。 在Struts的配置...

    struts国际化

    在Action类中,可以通过`ActionMessage`和`ActionErrors`对象来获取和显示错误及消息。例如,可以使用以下代码添加一个国际化消息: ```java ActionMessages messages = new ActionMessages(); messages.add("info",...

    struts基础入门笔记

    - 如果验证失败(返回包含 `ActionMessage` 的 `ActionErrors` 对象),则根据 `input` 属性转发到指定的页面。 ```java public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ...

    struts1 用户登录(包含验证)

    ActionErrors errors = new ActionErrors(); if (username == null || username.trim().length() ) { errors.add("username", new ActionMessage("error.username.required")); } if (password == null || ...

    struts1.2 validate 源代码 实现

    ActionErrors errors = new ActionErrors(); if (username == null || username.trim().isEmpty()) { errors.add("username", new ActionMessage("error.username.required")); } if (password == null || ...

    控制上传的文件的大小

    ActionErrors errors = new ActionErrors(); if (file != null && file.getFileSize() &gt; MAX_FILE_SIZE) { errors.add("file", new ActionMessage("error.file.size", MAX_FILE_SIZE)); } return errors; ...

    struts学习一天篇

    ActionErrors errors = new ActionErrors(); if (getUsername() == null || getUsername().length() ) { errors.add("username", new ActionMessage("error.username.required")); } if (getPassword() == null...

    struts1验证框架相当好的经典例子

    下面将详细介绍Struts1验证框架的使用。 首先,我们来看一下如何设置Struts1的验证框架。在`struts-config.xml`配置文件中,你需要定义一个`form-bean`,这代表一个表单 Bean,例如`userValidateForm`,并指定其...

    J2EE中Struts中四种解决中文乱码问题的方法

    public ActionErrors processPreprocess(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, MessageResources messages) throws ServletException { // 设置...

    jsp编写的网上书店

    ActionErrors errors=new ActionErrors(); userOPBean userOP=new userOPBean(); userBean user=new userBean(); //------得到用户对象------ addUserForm userForm=(addUserForm)form; user.setUser_address...

    Structs培训.doc

    5. **验证结果检查**:如果`validate()`方法返回`null`或者一个不包含`ActionMessage`的`ActionErrors`对象,表明表单验证成功。否则,表示存在验证错误。 6. **执行Action**:验证成功后,`ActionServlet`依据`...

    struts2数据验证与国际化

    ActionErrors errors = new ActionErrors(); if (!this.isDouble(myForm.getFirstNumber())) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.validate.number")); } if (!this.isDouble...

Global site tag (gtag.js) - Google Analytics