JSF/JSP ActionListener-Problem

psalm69

Grünschnabel
Hallo,
ich bin noch relativ neu in Sachen JSF/JAVA und suche ein Möglichkeit, den Actionlistener eines Commandbuttons erst zur Laufzeit anhand einer Variable zu bestimmen.

Wenn ich eine normale, hardcodierte Actionmethode angebe, kann ich nur innerhalb dieser Actionmethode entscheiden, welche Funktion aufzurufen ist.
Dazu müsste ich aber alle aufrufbaren Funktionen kennen, um z.B.

PHP:
if(destination.equals("doSomething()")) {
          doSomething()
}
auszuführen.


Optimal wäre es natürlich, den Actionlistener direkt aus dem Javacode zur Laufzeit zu setzen.


Um etwas mehr über den Hintergrund zu erzählen: Das Ganze soll ein Dialog-Popup werden, welches nach dem weiteren Programmverlauf fragt und dem Nutzer die Möglichkeit der Interaktion gibt. Man kann z.B. auf "Ok" oder "Abbrechen" klicken.
Um das Ganze nicht für jeden Dialog neu programmieren zu müssen, werden die Texte sowie die Buttons- und ihre Action- bzw. Actionlistenerattribute als Parameter übergeben.

Es wäre schön, wenn jemand einen eleganten Vorschlag zur Lösung dieses Problems hätte. :):rolleyes:

Schöne Güße!
 
Zuletzt bearbeitet:
Du könntest mit Reflektion arbeiten, als Java-Neuling aber noch nicht so geeignet.

Wie wär's, wenn Du für Deine "OK"- und "Abbrechen"-Buttons ein Inteface und eine abstrakte Klasse schreibst und für jeden Dialog die entsprechende Implementierung:

Code:
public interface DialogActionListener {
public void ok();
public void abbrechen();
}

Code:
public abstract class AbstractDialogActionListener implements DialogActionListener, ActionListener {
public void actionPerformed(ActionEvent ae) {
if ("Ok".equals(ae.getCommand()) {
this.ok();
} else {
this.abbrechen();
}
}
}

Code:
public class Dialog1ActionListener extends AbstractDialogActionListener {
public void ok() {
// Logik für Dialog1
}
public void abbrechen() {
// Logik für Dialog1
}
}

Code:
public class Dialog1 {
private Dialog1ActionListener al = new Dialog1ActionListener ();
//... alles Mögliche
okButton.addActionListener(al);
abbrechenButton.addActionListener(al);
}
 
Zurück