Avatar billede markymarc Nybegynder
04. maj 2005 - 11:42 Der er 9 kommentarer og
2 løsninger

Hvordan overskriver jeg en funktion i en klasse højere oppe ?

Sider og leger lidt med struts. I struts har jeg en klasse der hedder Action som indeholder en funktion der hedder execute.
Jeg har nu lavet en klasse der hedder BaseAction som modificere min Action klase. Den ser så ledes ud:

public abstract class BaseAction extends Action{

    public ActionForward execute(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws IOException, ServletException{
        LogedinBean login;
        HttpSession session;

        if(request.getSession(false)==null){
            return mapping.findForward("Login");
        }
        else session = request.getSession();

        if(session.getAttribute("login")==null){
            session.invalidate();
            return mapping.findForward("Login");
        }
        else login = (LogedinBean)session.getAttribute("login");

        if(login.getLc() == null){
            session.invalidate();
            return mapping.findForward("Login");
        }

        return executeAction(mapping, form, request, response);
    }

    protected abstract ActionForward executeAction(ActionMapping mapping,
                                                  ActionForm form,
                                                  HttpServletRequest request,
                                                  HttpServletResponse response) throws IOException, ServletException;

}

Det er jo alt sammen meget fint. MEN så har jeg også en anden klasse der hedder LookupDispatchAction, denne klasse extender også Action, men selvfølgelig uden min modificering.
Så hvordan få jeg LookupDispatchAction til at også includere mine modificationer?
(Ved godt at det måske er lidt et alm java spørgsmål men nu kom det herind)

på forhånd tak
Avatar billede arne_v Ekspert
04. maj 2005 - 11:51 #1
public class LookupDispatchAction extends BaseAction {
}

måske ?
Avatar billede fsconsult.dk Nybegynder
04. maj 2005 - 11:58 #2
Måden det ofte bliver gjort på, at lave en BaseAction som extender Action, og dine egne klasser extender så BaseAction istedet for Action.

Det bliver ofte implementeret sådan, at BaseAction definere en ny abstract doExecute metode, som dine egne actions skal implementere istedet for execute, og execute metoden i BaseAction laver så den logik der altid skal udføres.
Avatar billede markymarc Nybegynder
04. maj 2005 - 12:20 #3
jamen LookupDispatchAction extender jo DispatchAction hvilke så extender Action. Så jeg skal jo lave en ny BaseLookupDispatchAction.

Hvordan gør jeg det?
Avatar billede arne_v Ekspert
04. maj 2005 - 12:23 #4
Jeg er ikke sikker på hvad du vil men måske

Action
DispatchAction
BaseDispatchAction
LookupDispatchAction
Avatar billede markymarc Nybegynder
04. maj 2005 - 12:29 #5
nej kan jeg ikke for

Action
DispatchAction og
LookupDispatchAction

Er alle en del af struts og ville helst ikke rode med source koden til dem.
Helt enkelt vil jeg lave en klasse der hedder BaseLookupDispatchAction, som overskriver nogle metoder i Action klassen, uden at lave om i Action, DispatchAction eller LookupDispatchAction.
Hænger det sammen??
Avatar billede fsconsult.dk Nybegynder
04. maj 2005 - 12:42 #6
Du kan ikke lave en klasse, som overskriver en metode i alle 3 klasser.

Du kan lave 3 klasser som hverisær nedarver og overskriver metoderne for de valgte klasser.
Avatar billede arne_v Ekspert
04. maj 2005 - 12:49 #7
Det tror jeg ikke at du kan i normal Java.

Så skal du over i noget AOP !
Avatar billede markymarc Nybegynder
04. maj 2005 - 12:56 #8
Nu er jeg nok lidt sløv.
Men jeg kan ikke lave en BaseLookupDispatchAction klasse som gå ind og overskriver en metode i min Action klasse?
Avatar billede arne_v Ekspert
04. maj 2005 - 14:17 #9
Jo men du kan ikke få de indbyggede klasser i Struts til at bruge din metode når
de arver fra Struts klassen og ikke fra din klasse.

Sådan groft sagt skal alle dine klasser ligge nedenunder Struts klasserne.
Avatar billede markymarc Nybegynder
04. maj 2005 - 16:04 #10
jamen tak tak, blev da lidt klogere. Og fik det da løst, dog på mere besværlig måde.
Men syntes da i skulle dele mine point, så Arne læg lige et svar.
Avatar billede arne_v Ekspert
04. maj 2005 - 16:08 #11
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester