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
|