Hallo,
ich bin mir nicht sicher wo es besser aufgehoben ist, hier oder im Java-Forum.
Da ich hier mer Web-Programmierer vermute als im Java Forum, versuche ich es hier.
Ich habe eine Seite die über JSF (JavaServer Faces) erstellt wird.
Sie besteht vor allem aus einer Karte (ähnlich wie GoogleMaps), die auf meinem Server läuft.
Nun würde ich der Karte gerne mehr Funktionalitäten geben (wie z.B. GeoCoding, dass aus einer angeklickten Stelle die nächste Straße ermittelt wird).
Diese Funktionalität kann ich Serverseitig über Java bereitstellen.
Mittels Javascript soll per AJAX-Anfrage der Dienst angesprochen werden (per Get-Parameter werden benötigten Werte und Angaben übergeben) und die Antwort soll als JSON zurückkommen. Javascript soll diese Antwort entsprechend weiter verarbeiten (z.B. die entsprechende Straße einzeichnen).
Es wird später mehr Seiten bei uns geben, die diese Karte verwenden und für die diese Funktionalitäten ebenfalls interessant sein könnten. Aus diesem Grund will ich es nicht in das bestehende JSF-Projekt mit einbinden, sondern als extrigen Dienst anbieten.
Da ich für diesen Dienst eh Java brauche und die Seiten mittels JSF erstellt werden, will ich den Dienst auch per JSF anbieten. Vielleicht gäbe es hier auch was sinnvolleres, weil so brauche ich im Moment eine leere index.xhtml, damit der Dienst angesprichen werden kann.
Durch das Anmelden eines PhaseListener fange ich nun alle Anfragen nach der ersten Phase (PhaseId.RESTORE_VIEW) ab.
Erstelle das JSON-Objekt und schicke es zurück.
Im Moment sind es nur Test-Code schnippsel, bei denen ich aber schon Probleme habe.
Mein JavaScript sieht so aus:
Der Dienst im JSF-Projekt:
Das Programm führt den AJAX-Befehl aus,
Es wird die Callback-Methode mit dem Status 1, 2 und 4 aufgerufen.
Auf JSF-Seite sieht man, wie er in afterPhase Methode rein geht und alles wie gewünscht abarbeitet.
Wenn der Status 4 kommt ist immer req.responseText ein leerer String.
Wenn ich die Seite http://localhost:8080/MapFunctionsServer/index.xhtml im Browser aufrufe kommt aber genau das, was ich will, im Quelltest steht lediglich: {"message":"I am sending a message"}
Das führt dann natürlich bei var translation = eval('(' + req.responseText + ')'); zu einem Fehler:
Error: syntax error
Source Code:
()
in der Zeile von dem eval.
Bin am Verzweifeln und weiß grad nicht, an was das liegt und wie ich weiter machen muss.
Wäre froh, wenn mir wer helfen könnte.
Falls ihr denkt, dass es im Java Forum doch besser aufgehoben ist, könnt ihr es gerne verschieben.
Danke
(Vorgegangen bin ich bis jetzt nach http://today.java.net/article/2007/06/06/bundling-ajax-jsf-components )
ich bin mir nicht sicher wo es besser aufgehoben ist, hier oder im Java-Forum.
Da ich hier mer Web-Programmierer vermute als im Java Forum, versuche ich es hier.
Ich habe eine Seite die über JSF (JavaServer Faces) erstellt wird.
Sie besteht vor allem aus einer Karte (ähnlich wie GoogleMaps), die auf meinem Server läuft.
Nun würde ich der Karte gerne mehr Funktionalitäten geben (wie z.B. GeoCoding, dass aus einer angeklickten Stelle die nächste Straße ermittelt wird).
Diese Funktionalität kann ich Serverseitig über Java bereitstellen.
Mittels Javascript soll per AJAX-Anfrage der Dienst angesprochen werden (per Get-Parameter werden benötigten Werte und Angaben übergeben) und die Antwort soll als JSON zurückkommen. Javascript soll diese Antwort entsprechend weiter verarbeiten (z.B. die entsprechende Straße einzeichnen).
Es wird später mehr Seiten bei uns geben, die diese Karte verwenden und für die diese Funktionalitäten ebenfalls interessant sein könnten. Aus diesem Grund will ich es nicht in das bestehende JSF-Projekt mit einbinden, sondern als extrigen Dienst anbieten.
Da ich für diesen Dienst eh Java brauche und die Seiten mittels JSF erstellt werden, will ich den Dienst auch per JSF anbieten. Vielleicht gäbe es hier auch was sinnvolleres, weil so brauche ich im Moment eine leere index.xhtml, damit der Dienst angesprichen werden kann.
Durch das Anmelden eines PhaseListener fange ich nun alle Anfragen nach der ersten Phase (PhaseId.RESTORE_VIEW) ab.
Erstelle das JSON-Objekt und schicke es zurück.
Im Moment sind es nur Test-Code schnippsel, bei denen ich aber schon Probleme habe.
Mein JavaScript sieht so aus:
HTML:
var req = null;
function sendMapRequest()
{
var url = "http://localhost:8080/MapFunctionsServer/index.xhtml";
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else if (window.ActiveXObject)
req = new ActiveXObject("Microsoft.XMLHTTP");
if(req)
{
req.open("Get", url, true);
req.onreadystatechange = callback;
req.setRequestHeader("content-type","text/plain");
req.send(null);
}
}
function callback()
{
if(req.readyState == 4)
{
var translation = eval('(' + req.responseText + ')');
message = translation.message;
alert(message);
}
}
Der Dienst im JSF-Projekt:
Code:
public void afterPhase(PhaseEvent _event)
{
FacesContext context = _event.getFacesContext();
HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
try
{
JSONObject myMessage = new JSONObject();
myMessage.put("message", "I am sending a message");
response.setContentType("text/plain");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(myMessage.toString());
context.responseComplete();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Das Programm führt den AJAX-Befehl aus,
Es wird die Callback-Methode mit dem Status 1, 2 und 4 aufgerufen.
Auf JSF-Seite sieht man, wie er in afterPhase Methode rein geht und alles wie gewünscht abarbeitet.
Wenn der Status 4 kommt ist immer req.responseText ein leerer String.
Wenn ich die Seite http://localhost:8080/MapFunctionsServer/index.xhtml im Browser aufrufe kommt aber genau das, was ich will, im Quelltest steht lediglich: {"message":"I am sending a message"}
Das führt dann natürlich bei var translation = eval('(' + req.responseText + ')'); zu einem Fehler:
Error: syntax error
Source Code:
()
in der Zeile von dem eval.
Bin am Verzweifeln und weiß grad nicht, an was das liegt und wie ich weiter machen muss.
Wäre froh, wenn mir wer helfen könnte.
Falls ihr denkt, dass es im Java Forum doch besser aufgehoben ist, könnt ihr es gerne verschieben.
Danke
(Vorgegangen bin ich bis jetzt nach http://today.java.net/article/2007/06/06/bundling-ajax-jsf-components )
Zuletzt bearbeitet: