kellerlanplayer
www.Blog2Help.com
- 29 April 2006
- 2.280
- 247
Hallo,
ich möchte quasi eine 1:n Beziehung abbilden.
Ein Versuch kann mehrere Prüflinge haben.
Wenn Prüflinge vorhanden sind, sollen die bei den Versuchen angezeigt werden. Ich arbeite mit dem GWT-Framework:
Hier mal die relevanten Klassen:
Versuch:
VersuchScreen:
Wie man sehen kann, wird hier ein Versuch objekt übergeben, wenn verfügbar und übergibt das der PrueflingeAnzeigen - Klasse:
PrueflingeAnzeigen:
Wenn ein Versuch übergeben wurde, springt er automatisch in Zeile 71 und holt sich dort aus der HauptfunktionenServiceImpl die Versuche durch die Funktion projektSvc.prueflingeAnzeigen(versuch, callback);
HauptfunktionenServiceImpl
Also noch einmal zusammengefasst, wenn ich ein Prüfling anlege, muss ich einen Versuch auswählen, den er zugeordnet wird, der addet eigentlich in dem Versuchsobjekt in der Liste den Prüfling und wenn ich den Versuch anzeigen will, soll er mir die zugeordneten Prüflinge in der Liste ausspucken. Das funzt aber nicht und ich finde den fehler nicht. Er schmeißt mir immer nur ne Fehlermeldung, dass die Liste leer ist ...
Ich hoffe es ist einigermaßen verständlich und ihr könnt mir auf die Sprünge helfen ...
ich möchte quasi eine 1:n Beziehung abbilden.
Ein Versuch kann mehrere Prüflinge haben.
Wenn Prüflinge vorhanden sind, sollen die bei den Versuchen angezeigt werden. Ich arbeite mit dem GWT-Framework:
Hier mal die relevanten Klassen:
Versuch:
Code:
public class Versuch implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Projekt projekt;
private double Laufzeit;
private String Versuchsnummer;
private String Pruefmedium;
private Zyklus zyklus;
private String Versuchsanmerkung;
private String Bearbeiter;
private String Befunder;
private Date Datum;
private List<Pruefling> prueflingsContainer = new ArrayList<Pruefling>();
//public Versuch(){}
public List<Pruefling> getPrueflingsContainer() {
return prueflingsContainer;
}
public void addPrueflingsContainer(Pruefling pruefling) {
prueflingsContainer.add(pruefling);
}
public Date getDatum() {
return Datum;
}
public void setDatum(Date datum) {
Datum = datum;
}
public String getVersuchsnummer() {
return Versuchsnummer;
}
public void setVersuchsnummer(String versuchsnummer) {
Versuchsnummer = versuchsnummer;
}
public Projekt getProjekt() {
return projekt;
}
public void setProjekt(Projekt projekt) {
this.projekt = projekt;
}
public double getLaufzeit() {
return Laufzeit;
}
public void setLaufzeit(double laufzeit) {
Laufzeit = laufzeit;
}
public String getPruefmedium() {
return Pruefmedium;
}
public void setPruefmedium(String pruefmedium) {
Pruefmedium = pruefmedium;
}
public Zyklus getZyklus() {
return zyklus;
}
public void setZyklus(Zyklus zyklus) {
this.zyklus = zyklus;
}
public String getVersuchsanmerkung() {
return Versuchsanmerkung;
}
public void setVersuchsanmerkung(String versuchsanmerkung) {
Versuchsanmerkung = versuchsanmerkung;
}
public String getBearbeiter() {
return Bearbeiter;
}
public void setBearbeiter(String bearbeiter) {
Bearbeiter = bearbeiter;
}
public String getBefunder() {
return Befunder;
}
public void setBefunder(String befunder) {
Befunder = befunder;
}
}
VersuchScreen:
Code:
package de.ddb.client;
import java.util.ArrayList;
public class VersuchScreen extends Composite {
private HauptfunktionenServiceAsync haupt = GWT.create(HauptfunktionenService.class);
final FlexTable flexTable = new FlexTable();
final ListBox comboBox_2 = new ListBox();
final ListBox comboBox = new ListBox();
final Label erfolgLabel = new Label("New label");
final DatePicker datePicker = new DatePicker();
final ListBox comboBoxPruefmedium = new ListBox();
final ListBox comboBox_1 = new ListBox();
final TextArea textArea = new TextArea();
final TextBox textBox_1 = new TextBox();
final DoubleBox doubleBox = new DoubleBox();
private List<Projekt> projektContainer = new ArrayList<Projekt>();
final TextBox textBox = new TextBox();
public VersuchScreen(Versuch versuch) {
RootPanel.get("obenHauptfenster").clear();
RootPanel.get("Hauptfenster").clear();
RootPanel.get("rechteNavi").clear();
RootPanel.get("rechteNavi").add(new VersucheAnzeigen());
VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.setBorderWidth(0);
initWidget(verticalPanel);
verticalPanel.add(flexTable);
Label lblProjektAuswhlen = new Label("Projekt auswaehlen");
flexTable.setWidget(0, 0, lblProjektAuswhlen);
flexTable.setWidget(0, 1, comboBox);
Label lblProjektnummer = new Label("Versuchsnummer");
flexTable.setWidget(1, 0, lblProjektnummer);
flexTable.setWidget(1, 1, textBox);
Label lblVersuchsstart = new Label("Versuchsstart");
flexTable.setWidget(2, 0, lblVersuchsstart);
Label lblNewLabel = new Label("Laufzeit");
flexTable.setWidget(3, 0, lblNewLabel);
flexTable.setWidget(3, 1, doubleBox);
Label lblNewLabel_1 = new Label("Versuchsanmerkung");
flexTable.setWidget(4, 0, lblNewLabel_1);
flexTable.setWidget(4, 1, textArea);
textArea.setSize("176px", "89px");
Label lblVersuchsingenieur = new Label("Bearbeiter");
flexTable.setWidget(5, 0, lblVersuchsingenieur);
flexTable.setWidget(5, 1, comboBox_1);
Label lblBefunder = new Label("Befunder");
flexTable.setWidget(6, 0, lblBefunder);
flexTable.setWidget(6, 1, comboBox_2);
Label lblPruefmedium = new Label("Pruefmedium");
flexTable.setWidget(7, 0, lblPruefmedium);
flexTable.setWidget(7, 1, comboBoxPruefmedium);
flexTable.setWidget(9, 1, erfolgLabel);
erfolgLabel.setVisible(false);
//Überprüfen ob neuer Versuch oder vorhandener Versuch
if (versuch != null) {
showPrueflinge(versuch);
vorhandendenVersuchAnzeigen(versuch.getProjekt(), versuch.getLaufzeit(), versuch.getVersuchsnummer(), versuch.getPruefmedium(), versuch.getVersuchsanmerkung(), versuch.getBearbeiter(), versuch.getBefunder(), versuch.getDatum());
} else {
doubleBox.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
if (FieldVerifier.isDoubleZahl(doubleBox.getText()) == false) {
doubleBox.setText("Bitte ganzzahligen Wert eingeben");
}
}
});
//Projekte in ComboboxEinlesen
projektContainer = ProjekteAnzeigenComboBox();
textBox_1.setText("Klicken fuer Kalender");
flexTable.setWidget(2, 1, textBox_1);
textBox_1.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
datePicker.addHighlightHandler(new HighlightHandler<Date>() {
public void onHighlight(HighlightEvent<Date> event) {
textBox_1.setText("Datum auswaehlen");
textBox_1.setText(String.valueOf(datePicker.getValue()));
textBox_1.setEnabled(false);
}
});
flexTable.setWidget(2, 2, datePicker);
}
});
//Bearbeiter comboBox füllen
comboBox_1.addItem("Christian Fuchs");
comboBox_1.addItem("Daniel Paul");
comboBox_1.addItem("Karsten Stenzel");
comboBox_1.addItem("Matthias Weber");
comboBox_1.addItem("Peter Endl");
//Pruefmedium comboBox füllen
comboBoxPruefmedium.addItem("Gasoline");
comboBoxPruefmedium.addItem("Diesel");
comboBoxPruefmedium.addItem("Worst-Case-Diesel");
//Befunder comboBox füllen
comboBox_2.addItem("Andreas Ulig");
comboBox_2.addItem("Armin Mauerer");
comboBox_2.addItem("Rene Saffer");
final Button btnSpeichern = new Button("Speichern");
btnSpeichern.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//Versuch speichern
btnSpeichern.setVisible(false);
if (FieldVerifier.isValidName(textBox.getText())) {
AsyncCallback<Void> callback = new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
erfolgLabel.setText("Fehler" + caught.getMessage());
erfolgLabel.setVisible(true);
}
@Override
public void onSuccess(Void result) {
erfolgLabel.setText("Erfolgreich gespeichert");
erfolgLabel.setVisible(true);
RootPanel.get("rechteNavi").clear();
RootPanel.get("rechteNavi").add(new VersucheAnzeigen());
Button btnNeuesProjektErstellen = new Button("Neuen Versuch erstellen");
btnNeuesProjektErstellen.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
RootPanel.get("Hauptfenster").add(new VersuchScreen(null));
}
});
flexTable.setWidget(10, 1, btnNeuesProjektErstellen);
btnNeuesProjektErstellen.setWidth("209px");
flexTable.getCellFormatter().setHorizontalAlignment(3, 1, HasHorizontalAlignment.ALIGN_CENTER);
}
};
haupt.versuchAnlegen(projektContainer.get(comboBox.getSelectedIndex()), datePicker.getValue(), textBox.getValue(), doubleBox.getValue(), comboBoxPruefmedium.getItemText(comboBoxPruefmedium.getSelectedIndex()), textArea.getValue(), comboBox_1.getItemText(comboBox_1.getSelectedIndex()), comboBox_2.getItemText(comboBox_2.getSelectedIndex()), callback);
} else {
erfolgLabel.setText("Bitte gueltige Versuchsnummer angeben");
erfolgLabel.setVisible(true);
}
}
});
flexTable.setWidget(8, 1, btnSpeichern);
btnSpeichern.setWidth("115px");
flexTable.getCellFormatter().setHorizontalAlignment(8, 1, HasHorizontalAlignment.ALIGN_RIGHT);
}
}
public void ComboboxVersucheFuellen() {
//textBox_2.setText(String.valueOf(ProjekteAnzeigenComboBox().));
if (projektContainer.isEmpty()) {
comboBox.addItem("Keine Projekte angelegt");
} else {
for (int i=0; i < projektContainer.size(); i++) {
comboBox.addItem(projektContainer.get(i).getProjektnummer());
}
}
}
public List<Projekt> ProjekteAnzeigenComboBox() {
final List<Projekt> projekte = new ArrayList<Projekt>();
if (haupt == null) {
haupt = GWT.create(HauptfunktionenService.class);
}
AsyncCallback<List<Projekt>> callback = new AsyncCallback<List<Projekt>>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(List<Projekt> result) {
for (Projekt projekt : result) {
projekte.add(projekt);
}
ComboboxVersucheFuellen();
}
};
haupt.projekteAnzeigen(callback);
return projekte;
}
public void showPrueflinge(Versuch versuch) {
RootPanel.get("obenHauptfenster").add(new PrueflingeAnzeigen(versuch));
}
public void vorhandendenVersuchAnzeigen (Projekt projekt, double laufzeit, String versuchsnummer, String pruefmedium, String versuchsanmerkung, String bearbeiter, String befunder, Date datum) {
comboBox.addItem(projekt.getProjektnummer());
comboBox_1.addItem(bearbeiter);
comboBox_2.addItem(befunder);
comboBoxPruefmedium.addItem(pruefmedium);
textBox_1.setText(String.valueOf(datum.getDate()));
textArea.setText(versuchsanmerkung);
textBox.setText(versuchsnummer);
doubleBox.setValue(laufzeit);
}
}
Wie man sehen kann, wird hier ein Versuch objekt übergeben, wenn verfügbar und übergibt das der PrueflingeAnzeigen - Klasse:
Code:
RootPanel.get("obenHauptfenster").add(new PrueflingeAnzeigen(versuch));
PrueflingeAnzeigen:
Code:
public class PrueflingeAnzeigen extends Composite{
private HauptfunktionenServiceAsync projektSvc = GWT.create(HauptfunktionenService.class);
protected FlexTable flexTable = new FlexTable();
private List<Pruefling> projektContainer = new ArrayList<Pruefling>();
final List<Pruefling> prueflinge = new ArrayList<Pruefling>();
public PrueflingeAnzeigen (Versuch versuch) {
final VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.setBorderWidth(0);
initWidget(verticalPanel);
verticalPanel.setSize("93px", "314px");
verticalPanel.add(flexTable);
//verticalPanel.add(flexTable);
projektContainer = getPrueflinge(versuch);
//getPrueflinge(versuch);
}
public List<Pruefling> getPrueflinge(Versuch versuch) {
if (versuch == null) {
final List<Pruefling> prueflinge = new ArrayList<Pruefling>();
if (projektSvc == null) {
projektSvc = GWT.create(HauptfunktionenService.class);
}
AsyncCallback<List<Pruefling>> callback = new AsyncCallback<List<Pruefling>>() {
public void onFailure(Throwable caught) {
return;
}
public void onSuccess(List<Pruefling> result) {
if(result == null || result.size() == 0) {
Label lblKeineProjekteVorhanden = new Label("Keine Prueflinge vorhanden1");
flexTable.setWidget(1, 0, lblKeineProjekteVorhanden);
return;
} else {
for (Pruefling projekt : result) {
prueflinge.add(projekt);
}
showPrueflinge();
}
}
};
projektSvc.prueflingeAnzeigen(callback);
return prueflinge;
} else {
if (projektSvc == null) {
projektSvc = GWT.create(HauptfunktionenService.class);
}
AsyncCallback<List<Pruefling>> callback = new AsyncCallback<List<Pruefling>>() {
public void onFailure(Throwable caught) {
return;
}
public void onSuccess(List<Pruefling> result) {
if(result == null || result.size() == 0) {
Label lblKeineProjekteVorhanden = new Label("Keine Prueflinge vorhanden2");
flexTable.setWidget(1, 0, lblKeineProjekteVorhanden);
return;
} else {
for (Pruefling projekt : result) {
prueflinge.add(projekt);
}
showPrueflinge();
}
}
};
projektSvc.prueflingeAnzeigen(versuch, callback);
return prueflinge;
}
}
public void showPrueflinge() {
Label lblVorhandene = new Label("Vorhandene Prueflinge");
flexTable.setWidget(0, 0, lblVorhandene);
for (int i=0; i < projektContainer.size(); i++) {
Button btnNewButton = new Button(projektContainer.get(i).getPrueflingsnummer());
btnNewButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//RootPanel.get("Hauptfenster").add(new ProjektScreen(nummer, beschreibung));
}
});
flexTable.setWidget(i+1, 0, btnNewButton);
}
}
}
Wenn ein Versuch übergeben wurde, springt er automatisch in Zeile 71 und holt sich dort aus der HauptfunktionenServiceImpl die Versuche durch die Funktion projektSvc.prueflingeAnzeigen(versuch, callback);
HauptfunktionenServiceImpl
Code:
public class HauptfunktionenServiceImpl extends RemoteServiceServlet implements HauptfunktionenService {
/**
*
*/
private static final long serialVersionUID = 1L;
List<Versuch> versuche = new ArrayList<Versuch>();
List<Projekt> projekte = new ArrayList<Projekt>();
List<Zyklus> zyklen = new ArrayList<Zyklus>();
List<Pruefling> prueflinge = new ArrayList<Pruefling>();
List<Pruefling> prueflingTemp = new ArrayList<Pruefling>();
public void versuchAnlegen(Projekt projekt, Date datum, String versuchsnummer, double laufzeit,
String pruefmedium, String versuchsanmerkung, String bearbeiter,
String befunder) {
Versuch versuch = new Versuch();
versuch.setVersuchsnummer(versuchsnummer);
versuch.setProjekt(projekt);
versuch.setLaufzeit(laufzeit);
versuch.setPruefmedium(pruefmedium);
versuch.setVersuchsanmerkung(versuchsanmerkung);
versuch.setBearbeiter(bearbeiter);
versuch.setBefunder(befunder);
versuch.setDatum(datum);
versuche.add(versuch);
}
@Override
public List<Versuch> versucheAnzeigen(Projekt projekt) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Versuch> versucheAnzeigen() {
return versuche;
}
@Override
public void zyklusAnlegen(String name) {
Zyklus zyklus = new Zyklus();
zyklus.setBezeichnung(name);
zyklen.add(zyklus);
}
@Override
public List<Zyklus> zyklenAnzeigen() {
return zyklen;
}
@Override
public void prueflingAnlegen(Versuch versuch, String nummer) {
Pruefling pruefling = new Pruefling();
pruefling.setPrueflingsnummer(nummer);
prueflinge.add(pruefling);
prueflingZuordnen(versuch, pruefling);
}
public void prueflingZuordnen(Versuch versuch, Pruefling pruefling){
versuch.addPrueflingsContainer(pruefling);
}
@Override
public List<Pruefling> prueflingeAnzeigen(Versuch versuch) {
return versuch.getPrueflingsContainer();
}
@Override
public List<Pruefling> prueflingeAnzeigen() {
return prueflinge;
}
@Override
public void projektAnlegen(String beschreibung, String projektnummer) {
Projekt projekt = new Projekt();
projekt.setProjektnummer(projektnummer);
projekt.setProjektBeschreibung(beschreibung);
projekte.add(projekt);
}
@Override
public List<Projekt> projekteAnzeigen() {
return projekte;
}
}
Also noch einmal zusammengefasst, wenn ich ein Prüfling anlege, muss ich einen Versuch auswählen, den er zugeordnet wird, der addet eigentlich in dem Versuchsobjekt in der Liste den Prüfling und wenn ich den Versuch anzeigen will, soll er mir die zugeordneten Prüflinge in der Liste ausspucken. Das funzt aber nicht und ich finde den fehler nicht. Er schmeißt mir immer nur ne Fehlermeldung, dass die Liste leer ist ...
Ich hoffe es ist einigermaßen verständlich und ihr könnt mir auf die Sprünge helfen ...