You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Pieter Pareit <pp...@gmail.com> on 2006/01/13 21:27:08 UTC

A very helpfull utility class!! Feel free to use...

Hi,

I have developed two utility classes to store my actionMessages in a
ThreadLocal variabele

//-----  Code of my ErrorUtil class, I have the simular class for my
ActionMessages --------

package org.easy.framework.util;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class ErrorUtil {

 private static final ThreadLocal<ActionErrors> actionErrors = new
ThreadLocal<ActionErrors>();

 public static ActionErrors currentErrors(){
  ActionErrors errors = actionErrors.get();
  if(errors == null){
   System.out.println("new ActionErrors");
   errors = new ActionErrors();
   actionErrors.set(errors);
  }
  return errors;
 }

 public static void addError(ActionMessage message){
  currentErrors().add(ActionMessages.GLOBAL_MESSAGE, message);
 }

 public static void addError(String msg, ActionMessage message){
  currentErrors().add(msg, message);
 }

 public static boolean isEmpty(){
  ActionErrors errors = actionErrors.get();
  if(errors == null){
   return true;
  }
  return false;
 }

 public static void clear(){
  actionErrors.set(null);
 }

}

//----  A piece of code of my inhereted DispatchMethod -----

/**

If there are errors or messages found, add them to the request

**/

    protected ActionForward dispatchMethod(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response,
            String name) throws Exception {

     try{
      ActionForward actionForward = super.dispatchMethod
(mapping,form,request,response,name);
      // Return the returned ActionForward instance
      return actionForward;
     }catch(ValidationException e){
      return mapping.findForward(Constants.INPUT);
     }finally{
      //Add the actionMessages to the request
      if(!MessageUtil.isEmpty()){
        ActionMessages messages = new ActionMessages(
MessageUtil.currentMessages());
        saveMessages(request, messages);
        MessageUtil.clear();
      }
      //Add the actionErrors to the request
      if(!ErrorUtil.isEmpty()){
       ActionMessages messages = new ActionMessages(ErrorUtil.currentErrors
());
       saveErrors(request, messages);
       ErrorUtil.clear();
      }
      //Close the session, if session is open
      HibernateUtil.closeSession();
     }
    }

//--- An example how I use my actionMessage in my bussiness logic

 //--------------------------------------------------------------------------------
validate method
 private static void validate(Service service, String method) throws
ValidationException{

  if(HomeUtil.UPDATE.equals(method)){
   //ID constraint
   if(service.getId() == 0){
    ErrorUtil.addError("id",new ActionMessage("service.error.id.required"));
   }
  }

  if(HomeUtil.CREATE.equals(method) || HomeUtil.UPDATE.equals(method)){
   //code constraint
   if(service.getCode() == null || "".equals(service.getCode())){
    ErrorUtil.addError("code",new ActionMessage("service.error.code.required
"));
   }else{
    if(service.getCode().length() > 10)
     ErrorUtil.addError("code",new ActionMessage("service.error.code.tolong
",10));
    else
     if(!ServiceHome.checkUniqueCode(service))
      ErrorUtil.addError("code",new ActionMessage("
service.error.code.notunique",service.getCode()));
     else
      service.setCode(service.getCode().toUpperCase());
   }

   //name constraint
   if(service.getName() == null || "".equals(service.getName())){
    ErrorUtil.addError("name",new ActionMessage("service.error.name.required
"));
   }else{
    if(service.getName().length() > 40)
     ErrorUtil.addError("name",new ActionMessage("service.error.name.tolong
",40));
   }

   //Description constraint
   if(service.getDescription().length() > 250)
    ErrorUtil.addError("description",new ActionMessage("
service.error.description.tolong",250));
  }

  //throw errors if any
  if(!ErrorUtil.isEmpty()){
   throw new ValidationException();
  }
 }

Good luck!!

Pieter Pareit