Products
About Guided Tour Online Demo Download Trial Version Requirements
Resources
Dokumente Konfigurationsbeispiele TagLib-Referenz Useful Links
Customer Support
Updates Foren Contact Services
Sales
Licensing Sales FAQ Buy Online
 
 
 
buy online   |   about us   |   english version  

» Exkurs: Implementierung einer Callback-Methode

Die Tabelle verwendet bei der Anzeige der UserId eine spezielle Spalte; die Drilldownspalte. Diese löst einen Hyperlink aus, der in unserer Anwendung zu einer Verzweigung in die Detailansicht führt. In dieser Sicht sollen die Daten nicht bearbeitet werden. Hierzu dient der Edit-Button.

Um auf dieses Ereignis entsprechend zu reagieren, nehmen wir nun eine entsprechende CallBack-Methode in unserer UserBrowseAction auf. Da wir die BusinessLogik nicht an dieser Stelle implementieren möchten, leiten wir das Ereignis an eine andere Action - UserDisplayAction - weiter. Diese kann dann die Detailinformationen laden und die entsprechende JSP-Seite zur Anzeige aufrufen.

import java.io.IOException;
import javax.servlet.ServletException;

import com.cc.framework.adapter.struts.ActionContext;
import com.cc.framework.adapter.struts.FWAction;
import com.cc.framework.ui.control.ControlActionContext;
import com.cc.framework.ui.control.SimpleListControl;

import com.cc.sampleapp.common.Forwards;
import com.cc.sampleapp.common.Messages;
import com.cc.sampleapp.dbaccess.DBUser;
import com.cc.sampleapp.presentation.dsp.UserDisplayList;

public class UserBrowseAction extends FWAction {

    /**
     * @see com.cc.framework.adapter.struts.FWAction#doExecute(ActionContext)
     */
    public void doExecute(ActionContext ctx)
        throws IOException, ServletException {

    try {
            UserDisplayList dspData = DBUser.fetch();
            SimpleListControl userList = new SimpleListControl();
            userList.setDataModel(dspData);
            ctx.session().setAttribute("users", userList);
        }
        catch (Throwable t) {
            ctx.addGlobalError(Messages.ERROR, t);
        }

        // Display the Page with the UserList
        ctx.forwardToInput();
    }

    /**
     * This Method is called when the Drilldown-Column is clicked
     * In our Example we switch to the DetailView, which shows
     * more Information about the User. It's a readonly View.
     * @param   ctx ControlActionContext
     * @param   key     UniqueKey, as it was defined in the UserDisplayList
     *          to identify the Row. In this Example the UserId.
     */
    public void users_onDrilldown(ControlActionContext ctx, String key) {
        ctx.forwardByName(Forwards.DRILLDOWN, key);
    }
}

Der Name der CallBack-Methode setzt sich immer aus dem Namen der Bean, dem Präfix _on und dem eingetretenen Event zusammen. Der Name der Bean bestimmt sich wie folgt:

  • Wird das ListControl direkt übergeben, z.B. innerhalb der Session (wie oben) --> Dann entspricht der Beanname dem Name des Attributes, unter dem die Bean abgelegt wurde.
  • Befindet sich das ListControl innerhalb eines ActionForms --> Dann entspricht der Beanname dem Namen des Properties unterdem die Instanz des Controls innerhalb des Forms abgelegt ist.
In unserem Beispiel wird die Instanz des Kontrollelementes in der Session gehalten, damit das Kontrollelement seinen internen Status (aktuelle Seite, Displaydaten) über mehrere Serverroundtrips hinweg behält.
Die zu implementierende CallBack-Methode muss daher den Namen users_onDrilldown tragen. Sie bekommt den ControlActionContext übergeben, der unter anderem den Zugriff auf das Session-, Request- und Response Objekt kapselt.
Als weiterer Parameter wird der eindeutige Schlüssel für die Zeile übergeben, wie er innerhalb der DisplayListe mittels der Methode getUniqueKey(int index) spezifiziert wurde. Usere UserDisplayList liefert hier die UserId zurück.

zurück   |   Layouts

Impressum | This product includes software developed by the Java Apache Project
Tours
ListControl TreeControl TreeListControl TabSetControl Formelemente MenuControl Druckversion Live Demo Konfiguration