Ich hoffe, dies ist das richtige Unterforum, um dies zu posten. Ich bin sehr neu bei Maven, Vaadin und Java-Anwendungen im Allgemeinen, also hoffte ich, dass Sie mir dabei helfen könnten, da ich nicht sicher bin, wie ich am besten vorgehen könnte. Grundsätzlich habe ich ein Maven-Projekt (Java 7), das mit Javascript ein Popup-Fenster mit einem Formular innerhalb erstellt, können Sie eine Datei hochladen, zeigen Sie ihren Inhalt in einem Textfeld und senden Sie es (den Inhalt der Datei als String) über eine Ajax-Anfrage an den Server. Das war der einfache Teil. Was ich jetzt tun möchte, ist der Zugriff auf die Daten, die über Ajax gesendet werden (die Zeichenfolge, die die Daten der hochgeladenen Datei enthält) in Java, weil ich sie durch eine Validierung ausführen muss. Ich habe mich gut umgesehen, einschließlich des Buches Vaadin, und das Netz im Allgemeinen und in Anbetracht dessen, dass ich das noch nie gemacht habe, scheint es, dass ein Weg ein Stecker sein könnte, aber es sieht ein wenig zu kompliziert und auch aus es scheint - aus dem, was ich aus dem Buch von Vaadin https://vaadin.com/docs/-/part/framework/gwt/gwt-overview.html verstehe - dass ich nicht in der Lage sein werde, das in meinem Projekt zu implementieren, gegeben die Struktur, die ich habe - was anders ist als das, was da drin ist. Also, meine Frage an euch ist, da ich das Projekt habe (nur ein normales Maven-Projekt), was wäre der einfachste Weg für mich, um auf diese Daten von Java zuzugreifen? Hier ist ein Code aus dem Projekt, die Dinge in einen Kontext zu setzen:Zugriff Javascript-Daten von Java (Maven-Anwendung)
import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.JavaScript;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.client.ui.*;
@Theme("mytheme")
@Widgetset("my.vaadin.apptest.MyAppWidgetset")
@com.vaadin.annotations.JavaScript({"https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"
})
public class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
layout.addStyleName("myLayout");//add class to main div
Label label = new Label("Hello Vaadin user. Use this application to upload files.");
...
//HERE IS THE JAVASCRIPT CREATING AND INSTANTIATING THE POPUP AND THE AJAX CALL
//CREATING POPUP
JavaScript.getCurrent().execute(""
+"var $HTMLpopup = $('<div class=\"popupContainer\">"
+"<span class=\"cancelBtn big\"></span>"
+"<div class=\"wrapper\">"
+"<form action=\"\" id=\"fileForm\">"
+"<div class=\"mask\">"
+"<input type=\"file\" title=\" \"name=\"uploadFile\" class=\"uploadFile\" accept=\".mol,.sdf\">/*filters files to upload*/"
+"<span class=\"pseudoBtn\">Browse</span>"
+"<input type=\"text\" name=\"displayFile\" class=\"displayFile\" placeholder=\"no file loaded\">"
+"<span class=\"cancelBtn small\"></span>"
+"</div>"
+"<textarea class=\"fileResult\"></textarea>"
+"<button type=\"submit\" class=\"submitBtn\">Upload</button>"
+"<div class=\"clear\"></div>"
+"</form>"
+"</div>"
+"</div>');"
//INSTANTIATING THE POPUP
+"$('.popupTriggerBtn').click(function(){"
+"/*console.log('button clicked!');*/"
+"var $body = $('body');"
+"$HTMLpopup.appendTo($body);"
+"});"
//HERE IS THE AJAX BIT
+"var $submitBtn = $HTMLpopup.find('.submitBtn');"
+"$submitBtn.click(function(e){"
+"e.preventDefault();/*prevent submission*/"
+"if(isFileUploadEmpty()){/*IF EMPTY*/"
+"/*alert('submit clicked');*/"
+"removeError();"
+"showError('empty');"
+ "}"
+"else{/*IF NOT EMPTY*/"
+"/*AJAX OPS*/"
+"if (window.XMLHttpRequest){/*XMLHttpRequest SUPPORT?*/"
+"console.log('XMLHttpRequest supported!');"
+"var postData = returnFileAsString();/*returns the file as a string*/;"
+"/*console.log('here is the file as a string ' + postData);*/"
+"$.ajax({"
+"type:'post',"
+"url:'http://localhost:8080/apptest/',"
+"data:postData,"
+"contentType: 'application/x-www-form-urlencoded',"
+"success: function(responseData, textStatus, jqXHR){"
+"/*alert('data saved');*/"
+"console.log('responseData is ' + responseData);"
+"console.log('text status is ' + textStatus);"
+"console.log('the data submitted is ' + postData);"
+"},"
+"error: function(jqXHR, textStatus, errorThrown){"
+"console.log(errorThrown);"
+"alert('an error has occurred!');"
+"}"
+"});"
+"}"
+"}"
+"});"
+"");
//ADDING COMPONENTS
layout.addComponents(label, button);
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
}
Link Pastebin hier http://pastebin.com/mSEJq0HT Also, postdata enthält die Zeichenfolge, die ich an den Server weitergeleitet und ich möchte in Java zugreifen . Ich bin schon früher darauf gestoßen, was vielleicht ein anderer Weg ist, um damit umzugehen vaadin with ajax. Was denkt ihr? Jede Hilfe würde sehr geschätzt, danke
Verwechseln Sie nicht den Vaddin Client <-> Server Kommunikation. Fügen Sie einfach ein 'valueChangeListener' zum entsprechenden Feld auf der Java-Seite hinzu und Sie werden informiert, wenn sich der Wert geändert hat. –
ist dies ein reduziertes Beispiel? Wenn nicht, warum sollte man sich dann überhaupt mit Vaadin herumschlagen, wenn man nur einen riesigen Blob sendet, der JS-Strings zum Client schickt, um eine Jquery zu steuern, um eine Datei an einen anderen Endpunkt zu senden? Warum nicht ein vaadin Window, Upload, TextArea ... benutzen? – cfrick
alle gültigen Punkte Jungs, aber der Grund, warum ich vaadin benutze ist, weil ich lerne und an diesem Punkt fühle ich mich ein bisschen sicherer mit JS als ich mit Java/Vaddin Komponenten und damit senden all diese JS-String. Stimme zu, es wäre besser mit Upload, TextAreas etc, aber das wird kommen, wenn ich es umgestalten, nachdem ich ein bisschen selbstsicherer fühle, das ist. Im Moment dachte ich, ich würde die Prinzipien der Verwendung von RPC usw. verstehen, deshalb mache ich es auf diese Weise, auch wenn es nicht der beste Weg ist ... – antobbo