Class Funktion mit Ajax rufen

Kenan89

Bekanntes Mitglied
Hallo,

ich wollte wissen, wie man eine Methode einer Klasse mit Ajax aufrufen kann?

Also ich habe in meiner package xy die Klasse Autos. In dieser Klasse ist jetzt eine Methode mit tanken(int liter){}.
Die Klasse Autos wurde schon in index.jsp initialisiert mit
Java:
Autos autos = new Autos()
.
Ich hätte mir soetwas vorgestellt:
Java:
"$.get('autos.tanken', {param: 50}, refreshTable);" +

Ist es möglich?
 
S

SlaterB

Gast
Webanwendungen sind eine komplizierte Sache mit Standards und Frameworks,
Browser können nur Http-Requests senden, jedenfalls ist das der weltweite Standard,
Webserver müssen wissen wer der User war und irgendeine Ahnung haben welches JSP du damit meinen könntest, was das damalige Auto-Objekt (vor 5 sec, zwischendurch 100 andere Requests) wohl war, ist, sein wird
und inwiefern daraus noch Information in der Ajax-Antwort zurück übertragen werden kann

sich irgendwas dazu auszudenken ist in der Regel zum Scheitern verurteilt,
halte dich an Frameworks wie JSF oder Seam, die definieren in Büchern mit hunderten Seiten ausgefallene
Konzepte um solche Abstraktionsebenen für Beans, die Requests überdauern, abzubilden

Ajax ist fast ein Thema für sich, nicht unbedingt überall eingebunden, und wenn dann kaum genau so wie du es gern hättest,
wahrscheinlich kannst du auch nicht in die JSP-nahen Gefilde eingreifen sondern musst etwas separat im Server neue Daten laden + speichern,
aber das muss dir reichen, andere Wege kommen quasi nicht in Frage
 
Zuletzt bearbeitet von einem Moderator:

Kenan89

Bekanntes Mitglied
Jetzt habe ich das folgendermaßen ausprobiert, was nicht geklappt hat(aber wahrscheinlich habe ich ja einen Fehler gemacht).
Ist es theoretisch möglich, einen Button auf der index.jsp anzuklicken, sodass dieser Button mit dem EventHandler onclick ein request zum Server schickt mit dem Ziel index.jsp(also auf sich selbst). Dann empfängt ein Codeblock, welches schon in der index.jsp geschrieben ist diesen request und ruft eine Java Funktion in der index.jsp auf...

So ungefähr:

index.jsp:

Java:
<% out.println("Test: "+request.getParameter("par1")); %>
<%!
public String showIt(String txt){
return txt;
}

%>

<button id="testButton">Test</button>

<script>
$.get("index.jsp", {par1: "Hallo"}, bestaetigung);
function bestaetigung(){
 alert("OK");
}
</script>
 
S

SlaterB

Gast
hmm, ich habe es einmal (mehr oder weniger) gewagt aber verabschiede mich nun zu 'ist es theoretisch möglich'-Fragen

nochmal: gerade in so hochkomplexen Umgebungen solltest du das vorhandene lernen und dich danach richten
statt beliebige Abläufe auszudenken und dann die zugehörigen Befehle zu suchen
 

Kenan89

Bekanntes Mitglied
Okay, es ist tatsächlich möglich, mit ajax eine Klassenmethode aufzurufen(man muss ein bisschen in der web.xml-Datei schrauben)

Jetzt ist mein Problem, dass der Response ein String sein soll. Es wird nämlich ein request gesendet und die Methode ruft mit dem Parameter eine methode auf, die eine Tabelle aufbaut. Diese Tabelle wird in ein string gespeichert und soll in den response gespeichert werden, damit sie per callback funktion ein ein DOM-Knoten angehängt werden kann.
Problem ist, wenn ich schreibe:
response = baueTabelle(parameter);
Dann zeigt mir Eclispe dass er nicht einen String in ein HttpServletResponse umwandeln kann.
Was für einee Lösungsmöglichkeit gibt es hierfür?

Danke im voraus.
 

ARadauer

Top Contributor
nochmal: gerade in so hochkomplexen Umgebungen solltest du das vorhandene lernen und dich danach richten
Ist es wirklich so ein hochkomplexes Thema? mit jquery einen ajax request auf eine JSP oder Servlet absetzen die über den response.getWriter() einen String zurück schreibt, bzw direkt html dass man super mit jquery weiterverarbeiten kann...

das wird insgesammt ein 10 Zeiler... wobei ich jetzt die beiden JSP den Aufrufer und der Aufgerufende trennen würde....
seam usw.. schafft man sich da oft nicht künstlich komplexität die man oft nicht braucht?
 

Kenan89

Bekanntes Mitglied
Ja, das hatte ich gerade eben gelöst. Trotzdem danke.

Jetzt wird mir in der Callbackfunktion mit alert nur angezeigt: Object XMLDocument. Ich habe mich bereits im Google darüber schlau gemacht und habe erfahren, dass das normal ist, weil meine Tabelle wohl eine komplexe Struktur für alert hat.

In Firebug habe ich mir meinen getRequest genauer angeschaut und im Reiter XML steht leider:
XML-Verarbeitungsfehler: Kein Element gefunden

Was hat das zu bedeuten?

Hier der Code:

Klasse tabelle
Java:
public void doGet(HttpServletRequest request, HttpServletResponse response){
String req = request.getParameter("par1");
String response = response.getWriter().print(buildTable(req));
}

public String buildTable(String language){
//hier wird in ein String eine Tabelle gespeichert, die nach Sprache 
//in der Datenbanktabelle selektiert wird, die Sprache soll per get an diese
//Funktion übergeben werden, damit diese Tabelle sich dann neu aufbaut.
//Sie gibt einen String zurück, welche in repsonse gespeichert wird.
}

Javascript dazu:
Java:
$.get("tabelle", {par1: "de"}, function(data){
alert(data);})
 
S

SlaterB

Gast
@ARadauer
allein die Überlegung, dass der Ajax-Request an eine JSP geht, die hier dann auf komplizierte unnötige Weise mit Java-Code verfrachtet wird,
ist in meinen Augen der komplett falsche Weg,
unter dem Eindruck dass die JSP ein Akteur X wäre der da am Server sitzt und wartet

dazu das vorherige, ein Objekt autos aus einer früheren JSP-Sitzung, welches wartet und noch mal rückgefragt werden kann usw.,
das endet im Chaos

wenn man so herangeht:
"ich habe in einer HTML-Seite einen Ajax-Request A, der führt auf dem Server zu einem Servlet 'A-Bearbeitung',
dort wird (ohne jede Nebenwirkungen) ein Objekt B erzeugt und dessen String-Erzeugnis C zurückgesendet"
dann gibts natürlich wenig zu meckern,
eine JSP wäre dabei auch nicht beteiligt, von Erzeugung der ursprünglichen HTML-Seite mal abgesehen

sofern es um Lebenszyklus, Wiederaufbau der vorherigen Objekte usw. geht, wirds kompliziert,
mag sein dass ich zuviel hineininterpretiert habe

------------

@Kenan89
> Was hat das zu bedeuten?

wie sieht denn die Rückgabe aus? richtest du dich einmal mehr nach Standards,
etwas XML-Aufbau für Ajax-Responses, oder sendest du HTML?
 
Zuletzt bearbeitet von einem Moderator:

Kenan89

Bekanntes Mitglied
Also es ist so.
In HTML(index.jsp) habe ich ein Div mit der Id "Tabellenplatz".

Die Überlegung ist, in diesen div den response String per append mit JQuery einzubinden.

Unter dem Div sind buttons, wo du die Sprache auswählen kannst.

Du klickst ein Button (z.B. "deutsch"), dann schickt Jquery mit $.get einen Request mit dem parameter "deutsch" an meine Klasse "tabelle".

Die "tabelle"-Klasse empfängt den request in der "doGet Methode" und ruft die andere Methode(in der gleichen Klasse) "public String buildTable".

Diese selectiert aus der Datenbanktabelle alle Vokabeln mit der Sprache "deutsch" und erstellt eine HTML-Tabelle, in einem String gespeichert und gibt diesen String zurück.

Da doGet die Methode buildTable so aufgerufen hat: "repsonse.getWriter().print(buildTable(language)" und ich in meiner callback Funktion folgendes geschrieben habe: "function(data){alert(data);}" müsste mir doch im Alert Fenster der String angezeigt werden, der an die methode buildTable zurückgegeben wurde.

EDIT:
Im alert Fenster müsste ich dann sowas in der Art sehn:
Code:
<table>
<tr>
<td colspan="2">Deutsch:</td>
</tr>
<tr>
<td>Wort 1</td><td>Wort 1</td>
</tr>
<tr>
<td>Wort 1</td><td>Wort 1</td>
</tr>
<tr>
<td>Wort 1</td><td>Wort 1</td>
</tr>
<tr>
<td>Wort 1</td><td>Wort 1</td>
</tr><tr>
<td>Wort 1</td><td>Wort 1</td>
</tr>

</table>
 
Zuletzt bearbeitet:

Kenan89

Bekanntes Mitglied
Jetzt habe ich gerade eben in Eclipse gesehen, dass eine NullPointerException aufgetreten ist. Ich versuche die Ursache herauszufinden.

Mist, anscheinend werden alle bereits berechneten Variablen bei dem get-request wieder auf 0 gesetzt. Meine buildTabelle-Methode kann keinen String zurückgeben, weil sie nicht in die for-Schleife kommt. Die For-Schleife geht so lange, wie es Zeilen gibt.
Ich glaube $.get ruft ein neues Object der Klasse tabelle auf.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JSP Class not found beim Applet-Start Web Tier 4
W List queryForList(String sql, Class element) Web Tier 4
N class not found database Driver Servlet WEB-INF Web Tier 3
L Can't instantiate Class -> ClassNotFoundException Web Tier 16
W JavaBeans class="" macht Probleme Web Tier 2
T div-tag style VS class Web Tier 5
J Funktion für AJAX - Problem mit Return Web Tier 14
W JSF DataTable - Filter Funktion funktioniert nicht Web Tier 3
N Nixsagende Fehlermeldung bei EL-Funktion Web Tier 2
ruutaiokwu HttpServlet konstruktor und init()-funktion? Web Tier 9
B Zurück Funktion Web Tier 8
S EJB Funktion in JSP aufrufen? Web Tier 2
7 Struts iterator index JS-Funktion übergeben?? Web Tier 2
S JavaScript-Funktion aufrufen mit a4j-support?? Web Tier 3
G Platzhalter Funktion Web Tier 2
pkm Probleme mit einem AJAX-Call in einem dynamischen Webprojekt Web Tier 15
S AJAX/RestController Post Problem Web Tier 18
J JSF/JEE6 asynchronie Statusmeldungen per ajax Web Tier 1
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
J Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE Web Tier 1
S JSF mit Ajax? Web Tier 3
V Wie baue ich eine Ajax Webanwendung? Suche Beispielanwendung (UML) eines AJAX Service Web Tier 0
P JSF Ajax aktualisiert Seite neu Web Tier 2
L JSF Composit Component mit ajax funktioniert nicht. Web Tier 4
M Ajax Fehler zur Laufzeit Web Tier 5
T JSF Primefaces: DataTable Ajax Update - Weiterleitung von anderer Seite Web Tier 11
S JSF SelectOneMenu - Probleme mit AJAX Web Tier 6
S JSF ComboBox mit JSF 2.0/ajax Web Tier 4
P JSF tag "ajax" not found Web Tier 3
M JSF DataTable refreshen mit Ajax? Web Tier 5
R JSF Mit Ajax ganze Seite neu laden Web Tier 2
J Ajax ist undefiniert Web Tier 3
P JSF AJAX render wird nicht ausgeführt Web Tier 4
M JSF Ajax Command Link Web Tier 2
X Seite wird mit AJAX neu geladen Web Tier 4
J JSF AJAX-Aufruf ohne Komponente Web Tier 4
S Richfaces 4.0 Ajax Waitingpanel Web Tier 2
G JSF 2x h:selectManyCheckbox ohne duplikate Auswahl/selectManyCheckbox und f:ajax Web Tier 3
P JSF Login per Ajax validieren. Was ist der Beste Weg? Web Tier 4
S Ajax Request verhindert forward? Web Tier 8
P JSF Ajax refresh nach Linkklick Web Tier 4
B Ajax JSON Objekt verschicken Web Tier 3
N Htmlunit Test mit Ajax Web Tier 2
D JSF Ajax mit Facelets (PrimeFaces) Web Tier 4
G mit Ajax ein Image vom Server holen Web Tier 2
J JSP und Ajax Web Tier 6
7 Struts+AJAX- Session-Handling? Web Tier 2
H Richfaces - Taglib Problem gelb unterstrichen Ajax Output Web Tier 6
S Framework, AJAX Drag and Drop Hilfe? Web Tier 2
H Welches Ajax Framework Web Tier 8
7 Struts und Ajax. Problem mit Actions Web Tier 2
F AJAX: Inhalt nachladen + load icon Web Tier 2
I AJAX - Problem Web Tier 18
I AJAX update Web Tier 2
T <f:ajax> in JSF2.0 Komponente ein- und ausblenden Web Tier 4
D [JSF] Center per Ajax wechseln Web Tier 3
D Ajax und Validation ohne große Umstrukturierung Web Tier 3
G Probleme mit Ajax Login (jsp) Web Tier 5
I Ajax DOM speichern Web Tier 27
V Image Map und Ajax-Richfaces Web Tier 5
J Ajax in MyFaces? Web Tier 6
K Orientierungslosigkeit: Webservice+Ajax(echo2)+Session-Management Web Tier 4
S Beschleunigung Verarbeitung, ...Ajax Client-Side? Web Tier 3
C RichFaces Ajax ReRender funktioniert nicht. Web Tier 2
T Ajax / Javascript Plugin für Eclipse Web Tier 1
G AJAX und J2EE Web Tier 6

Ähnliche Java Themen

Neue Themen


Oben