In fact, in the catch(Exception ex) branch there should be a return mapping.findForward("generalError"); which I didn't include in the example . But generally you're approach is better, and more appropriate. Do yoy have any real examples on Exception handlers, or any links to which you may point me ?
Thanks, Ovidiu ----- Original Message ----- From: "Kris Schneider" <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Thursday, November 20, 2003 4:36 PM Subject: Re: Simulating multiple inheritance for Action and DispatchAction Well, what if you don't provide a handler (or a standard servlet error page)? An unhandled exception will be propogated to the container which will return a status code 500 to your users. I wouldn't really call the resulting generic "internal server error" user friendly. BTW, your code for catching Exception just prints a stacktrace, logs a message, and then falls through to return whatever "forward" has been set to (null?). Quoting Ovidiu EFTIMIE <[EMAIL PROTECTED]>: > For BaseException there is not really a need to catch it in BaseAction, > because > I'll have a handler, but for Exception I don't know. Is it a good practice > to > declare may own handler? > > Ovidiu > > ----- Original Message ----- > From: "Kris Schneider" <[EMAIL PROTECTED]> > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > Sent: Thursday, November 20, 2003 4:02 PM > Subject: Re: Simulating multiple inheritance for Action and DispatchAction > > > Why not just declare handlers for *both* BaseException and Exception in > struts-config? > > Quoting Ovidiu EFTIMIE <[EMAIL PROTECTED]>: > > > I agree with you regarding the leading I ; > > I've implemented the setServlet method after sending the mail :) > > Yes you're right about GeneralImpl it must be final . > > I'm overiding execute just for BaseAction of course :), and I do it to > > catch > > exception that are not applicational > > Something like this > > try{ > > > > forward = executeAction(....); > > }catch(BaseException bex){ > > log.error(bex); > > //to be catched by the handlers declared in struts-config.xml > > throw bex > > }catch(Exception ex){ > > ex.printStackTrace(); > > log.fatal(e); > > } > > return forward; > > > > Ovidiu > > > > > > ----- Original Message ----- > > From: "Kris Schneider" <[EMAIL PROTECTED]> > > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > > Sent: Thursday, November 20, 2003 2:13 PM > > Subject: Re: Simulating multiple inheritance for Action and > DispatchAction > > > > > > The general approach is probably fine, although naming interfaces with a > > leading > > "I" makes me gag ;-). However, this seems like a bad idea: > > > > public abstract class BaseAction extends Action implements IGeneral { > > private static GeneralImpl general; > > public BaseAction() { > > general = new GeneralImpl(servlet); > > } > > ... > > } > > > > Every time an instance of BaseAction is created, the *static* field > > "general" > > gets reset. Also, where is BaseAction getting the "servlet" arg to pass > to > > the > > GeneralImpl constructor? Instead, perhaps: > > > > public abstract class BaseAction extends Action implements IGeneral { > > private final IGeneral general; > > public BaseAction() { > > this.general = new GeneralImpl(); > > } > > public void setServlet(ActionServlet servlet) { > > super.setServlet(servlet); > > this.general.setServlet(sevlet); > > } > > ... > > } > > > > Of course, that means adding a setServlet method to IGeneral and > > GeneralImpl. > > I'm also not sure why you'd override execute just to call executeAction. > > You > > certainly wouldn't want to override DispatchAction's execute method, > right? > > > > Quoting Ovidiu EFTIMIE <[EMAIL PROTECTED]>: > > > > > Hi, > > > In my application I need to have my Actions and my DispatchActions. > > > Each one of this actions must have the same base class in which I have > > > common > > > methods to both of them. > > > My solution is to first declare an interface IGeneral in which I'm > > declaring > > > the > > > common methods, then create an implementation class,GeneralImpl.Next > thind > > to > > > do > > > would be to create my base classes BaseAction and BaseDispatchAction > and > > > this > > > two must implement IGeneral, and in their implementation they should > > delegate > > > to > > > a private static member of type GeneralImpl, which will handle this > > > methods. > > > Example: > > > <code> > > > public interface IGeneral{ > > > public Connection getConnection() throws SQLException; > > > ........... > > > public User getUser(HttpServletRequest req); > > > } > > > </code> > > > > > > > > > Then I'm creating the implementation for this methods: > > > > > > > > > <code> > > > public class GeneralImpl implements IGeneral{ > > > private ActionServlet servlet; > > > public GeneralImpl(ActionServlet srv){ > > > servlet = srv; > > > } > > > public Connection getConnection() throws SQLException{ > > > //code here > > > } > > > ........... > > > public User getUser(HttpServletRequest req){ > > > //code here > > > } > > > } > > > </code> > > > > > > Now I create the base Actions > > > > > > <code> > > > public abstract class BaseAction extends Action implements IGeneral > { > > > private static GeneralImpl general; > > > public BaseAction (){ > > > general = new GeneralImpl(servlet); > > > } > > > public ActionForward execute(ActionMapping > mapping,ActionForm > > > form,HttpServletRequest request,HttpServletResponse response){ > > > return executeAction(ActionMapping mapping,ActionForm > > > form,HttpServletRequest request,HttpServletResponse response) > > > } > > > public abstract executeAction(ActionMapping > > mapping,ActionForm > > > form,HttpServletRequest request,HttpServletResponse response); > > > public Connection getConnection() throws SQLException{ > > > return general.getConnection(); > > > } > > > public User getUser(HttpServletRequest req){ > > > return general.getUser(req); > > > } > > > } > > > </code> > > > The same for the DipatchAction. > > > > > > The question is anoybody has used something like this ? It this a good > > thing > > > to > > > do it ? > > > > > > Tanks in advance and sorry if the text it's too long > > > Ovidiu > > > > -- > > Kris Schneider <mailto:[EMAIL PROTECTED]> > > D.O.Tech <http://www.dotech.com/> > > -- > Kris Schneider <mailto:[EMAIL PROTECTED]> > D.O.Tech <http://www.dotech.com/> -- Kris Schneider <mailto:[EMAIL PROTECTED]> D.O.Tech <http://www.dotech.com/> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]