# GWT mit Google App Engine



## thomas_228 (24. Apr 2014)

Hallo zusammen,

Ich habe folgendes Problem. Da ich jetzt in der Abschlussklasse bin, muss ich eine Schwerpunktarbeit schreiben. Dies sollte ein Java Programm sein. Dieses Java Programm muss ich mit Google Web Toolkit und Google App Engine lösen.In der App Engine sollte eine grafische Oberfläche laufen, wo man Vor und Nachname eingeben kann. Dies habe ich schon gemacht. Hier ist der Code vom Client Package, meine Frage wäre nun, was ich im Server Package schreiben muss, damit ich txtVorname und txtNachname auslesen kann und in so eine Art Datenbank speichern kann.


```
package vsdb_abwesenheiten.client;

import java.net.URLClassLoader;

/*import com.google.appengine.api.datastore.DatastoreService;


 /**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class VSDB_Abwesenheiten implements EntryPoint {
	/**
	 * The message displayed to the user when the server cannot be reached or
	 * returns an error.
	 */
	private static final String SERVER_ERROR = "An error occurred while "
			+ "attempting to contact the server. Please check your network "
			+ "connection and try again.";

	/**
	 * Create a remote service proxy to talk to the server-side Greeting
	 * service.
	 */

	/**
	 * * This is the entry point method.
	 */

	/**
	 * Initialize here so that the radio Buttons are everywhere in the Code
	 * available
	 */

	final RadioButton rdoSekret = new RadioButton("rdoSekr", "Sekret\u00E4riat");
	RadioButton rdoMitarbeiter = new RadioButton("rdoMitarbeiter",
			"Mitarbeiter");
	final TextBox txtBenutzername = new TextBox();
	final ListBox lstAbwesenheit = new ListBox();
	final PasswordTextBox txtPasswort = new PasswordTextBox();
	final TextBox txtVorname = new TextBox();
	final TextBox txtNachname = new TextBox();
	final DateBox dateVon = new DateBox();
	final DateBox dateBis = new DateBox();
	final Button btnAbwesenheitEintragen = new Button("Abwesenheit eintragen");
	final Label lblAbwesenheitsgrund = new Label("Abwesenheitsgrund");
	final Label lblBenutzername = new Label("Benutzername");
	final Label lblPasswort = new Label("Passwort");

	public void onModuleLoad() {

		RootPanel rootPanel = RootPanel.get();

		lstAbwesenheit.setEnabled(false);// Dass man beim Start nicht gleich was
											// auswählen kann
		txtBenutzername.setEnabled(false);
		txtPasswort.setEnabled(false);
		txtVorname.setEnabled(false);
		txtNachname.setEnabled(false);
		dateVon.setEnabled(false);
		dateBis.setEnabled(false);
		btnAbwesenheitEintragen.setEnabled(false);

		final AbsolutePanel absolutePanel = new AbsolutePanel();
		rootPanel.add(absolutePanel, 0, 0);
		absolutePanel.setSize("900px", "600px");
		absolutePanel.setStyleName("absolutePanel");

		/**
		 * @author Thomas Here is the onKeyDown Methode so that you can give in
		 *         your Username and Password and with Enter you accept these
		 *         inputs
		 */

		txtPasswort.addKeyDownHandler(new KeyDownHandler() {
			public void onKeyDown(KeyDownEvent event) {

				if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
					if (txtBenutzername.getText().toString() == "admin"
							&& txtPasswort.getText().toString() == "admin") {
						lstAbwesenheit.setEnabled(true);
						Window.alert("Richtig");
						txtBenutzername.setText("");
						txtPasswort.setText("");

					} else {
						Window.alert("Sie müssen den richtigen Benutzernamen oder das richtige Passwort eingeben");
					}
				}
			}

		});
		absolutePanel.add(txtPasswort, 400, 99);
		txtPasswort.setSize("90px", "16px");

		final Label lblNewLabel = new Label("Vorname");
		absolutePanel.add(lblNewLabel, 10, 58);
		lblNewLabel.setVisible(true);

		final Label lblNewLabel_1 = new Label("Nachname");
		absolutePanel.add(lblNewLabel_1, 10, 101);
		lblNewLabel_1.setVisible(true);

		txtVorname.setName("txtVorname");
		absolutePanel.add(txtVorname, 78, 58);
		txtVorname.setSize("98px", "18px");
		txtVorname.setVisible(true);

		txtNachname.setName("txtNachname");
		absolutePanel.add(txtNachname, 78, 101);
		txtNachname.setSize("98px", "18px");
		txtNachname.setVisible(true);

		final Label lblAbwesenheitVon = new Label("Abwesenheit von");
		absolutePanel.add(lblAbwesenheitVon, 6, 158);
		lblAbwesenheitVon.setVisible(true);

		dateVon.setFormat(new DefaultFormat(DateTimeFormat
				.getFormat("dd MMMM: y")));
		absolutePanel.add(dateVon, 10, 181);
		dateVon.setSize("113px", "16px");
		dateVon.setVisible(true);

		final Label lblBis = new Label("bis");
		absolutePanel.add(lblBis, 186, 158);
		lblBis.setVisible(true);

		dateBis.setFormat(new DefaultFormat(DateTimeFormat
				.getFormat("dd MMMM: y")));
		absolutePanel.add(dateBis, 139, 181);
		dateBis.setSize("113px", "16px");
		dateBis.setVisible(true);

		btnAbwesenheitEintragen.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				/**
				 * Bei diesem Button-Click sollte ein Servlet die Daten von der
				 * Textbox Vorname und Nachname holen und die Datumsauswahl. Das
				 * Servlet ist im Server Package und sollte dies dann in die
				 * Datastore schreiben
				 */

				if (dateVon != null || dateBis != null) {

					String vorname = txtVorname.getText();
					String nachname = txtNachname.getText();
					String von = dateVon.getValue().toString();
					String bis = dateBis.getValue().toString();
					final String symbol = txtVorname.getText().toUpperCase()
							.trim();
					// Stock code must be between 1 and 10 chars that are
					// numbers,
					// letters, or dots.
					if (!symbol.matches("^[0-9A-Z\\.]{1,10}$")) {
						Window.alert("'" + symbol + "' is not a valid symbol.");
						return;
					}

					System.out.println(vorname + " " + nachname
							+ " Sie haben ihre Abwesenheit von " + von
							+ " bis " + bis + " eingetragen");
					Window.alert(vorname + " " + nachname
							+ " Sie haben ihre Abwesenheit von " + von
							+ " bis " + bis + " eingetragen");

				} else {
					Window.alert("Sie müssen ein Datum eingeben");
					return;
				}

				GreetingServiceAsync proxy = (GreetingServiceAsync) GWT
						.create(VSDB_Abwesenheiten.class);

				AsyncCallback<String> callback = new AsyncCallback<String>() {

					@Override
					public void onSuccess(String result) {

						DialogBox box = new DialogBox();
						box.add(new Label(result));
						box.setText(("Grüße vom Server"));
						box.show();
					}

					@Override
					public void onFailure(Throwable caught) {
						// TODO Auto-generated method stub

					}
				};
				proxy.greet(txtVorname.getText(), callback);

			}

		});

		absolutePanel.add(btnAbwesenheitEintragen, 36, 215);
		btnAbwesenheitEintragen.setVisible(true);

		absolutePanel.add(lblBenutzername, 310, 58);
		lblBenutzername.setVisible(true);

		absolutePanel.add(lblPasswort, 310, 101);
		lblPasswort.setVisible(true);

		txtBenutzername.setName("txtBenutzername");
		absolutePanel.add(txtBenutzername, 400, 63);
		txtBenutzername.setSize("89px", "18px");
		txtBenutzername.setVisible(true);

		lstAbwesenheit.setName("lstAbwesenheit");
		absolutePanel.add(lstAbwesenheit, 400, 167);
		lstAbwesenheit.setVisibleItemCount(3);

		lstAbwesenheit.addItem("Krankheit");
		lstAbwesenheit.addItem("Urlaub");
		lstAbwesenheit.addItem("Fortbildung");

		absolutePanel.add(lblAbwesenheitsgrund, 354, 137);
		lblAbwesenheitsgrund.setVisible(true);

		rdoMitarbeiter.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				// Eigenschaften von Sekretäriat Disablen
				rdoSekret.setChecked(false);
				lstAbwesenheit.setEnabled(false);
				txtBenutzername.setEnabled(false);
				txtPasswort.setEnabled(false);

				// Mitarbeiter Eigenschaften Freigeben
				txtVorname.setEnabled(true);
				txtNachname.setEnabled(true);
				dateVon.setEnabled(true);
				dateBis.setEnabled(true);
				btnAbwesenheitEintragen.setEnabled(true);

			}
		});
		absolutePanel.add(rdoMitarbeiter, 30, 10);

		rdoSekret.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				rdoMitarbeiter.setChecked(false);// RadioButton von Mitarbeiter
													// Disablen
				// Mitarbeiter Disablen
				txtVorname.setEnabled(false);
				txtNachname.setEnabled(false);
				dateVon.setEnabled(false);
				dateBis.setEnabled(false);

				// Sekretäriat
				txtBenutzername.setEnabled(true);
				txtPasswort.setEnabled(true);
				// lstAbwesenheit.setEnabled(true);

			}
		});
		rdoSekret.setHTML("Sekretariat");

		absolutePanel.add(rdoSekret, 337, 10);

		AbsolutePanel absolutePanel_1 = new AbsolutePanel();
		absolutePanel.add(absolutePanel_1, 0, 268);
		absolutePanel_1.setSize("449px", "127px");

		Button btnZuruecksetzten = new Button(
				"\u00C4nderungen zur\u00FCcksetzten");
		btnZuruecksetzten.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				if (rdoMitarbeiter.isChecked() == false
						&& rdoSekret.isChecked() == false) {
					Window.alert("Zuerst etwas auswaehlen");
				}

				if (rdoMitarbeiter.isChecked() || rdoSekret.isChecked()) {
					txtVorname.setText("");
					txtNachname.setText("");
					txtBenutzername.setText("");
					txtPasswort.setText("");
					dateBis.setValue(null);
					dateVon.setValue(null);

				}

			}
		});
		absolutePanel_1.add(btnZuruecksetzten, 196, 0);
		btnZuruecksetzten.setSize("243px", "30px");

		Button btnInformationsbildschirm = new Button("Informationsbildschirm");
		btnInformationsbildschirm.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				// Todo
				// Open popup Tab and show all stuffs.
				// VSDB_Abwesenheiten_Informationsbildschirm vsdb = new
				// VSDB_Abwesenheiten_Informationsbildschirm();
				// Window.open("http://www.google.com/", "_blank", "");

			}
		});
		absolutePanel_1.add(btnInformationsbildschirm, 10, 0);

	}

}
```
Hatt vielleicht irgendjemand eine Idee wie sowas funktioniern könnte bin nämlich schon am Verzweifeln :autsch:


----------

