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