2016-05-26 10 views
0

Dies ist meine erste Feder-Anwendung (Maven-Projekt), die Benutzer zum Hochladen und Validieren einer Datei ermöglichen soll. Ich habe im Moment nur die Standardklasse genannt MyUI.java, die brauchen alles, was ich enthält, hier ein Auszug:erstellen Sie neue Java-Klasse im Frühjahr Anwendung

EDITED Code:

FileUploader.java

public class FileUploader extends AbstractJavaScriptComponent {
public void callScript(){//as usual, it needs a method!! JavaScript.getCurrent().execute(""
+"jsInit();" +"");
}

und Änderungen an die MyUI Klasse: `final Fileuploader Fileuploader = new Fileuploader(); // hat endgültig sein scheinbar

final Button button = new Button("Open popup"); 
    button.addClickListener(new Button.ClickListener(){ 
     @Override 
     public void buttonClick(ClickEvent event){ 
      fileUploader.callScript(); 
     } 
    });`  

Ich muss den js-Aufruf in eine neue Java-Klasse in einer separaten Datei verschieben, also habe ich eine neue Klasse erstellt, die jetzt in einer eigenen Datei sitzt und AbstractJavaScriptComponent erweitert, meine Frage ist, welche Importe ich für diese Klasse brauche, alle diejenigen, die in der vorherigen Klasse außer der Benutzeroberfläche sind oder diese enthalten? Buchstäblich diese Klasse wird nur den js Anruf für jetzt haben (es gibt mehr Sachen später)? Auch, um diese Klasse nutzen zu können, muss ich vermutlich As -> maven install ausführen? Und was soll ich generell tun? cheers

+0

Welche Importe? Entfernen Sie einfach alle Importe, lassen Sie Ihre IDE der Wahl zeigen die Kompilierungsfehler, dann importieren Sie sie aus den Vorschlägen –

+0

OK, danke @ cricket_007 so weit meine neue Klasse sieht so aus http://pastebin.com/WQaGN8YY und meine alte ist http://pastebin.com/dKYSri1W Was muss ich tun, damit die Anwendung die JavaScript-Datei wie in der neuen Klasse aufruft? Im Moment bekomme ich Java-Fehler: '-Syntax Fehler auf Token". ", {Erwartet -Syntax Fehler auf Token" getcurrent ", Kennung nach diesem Token erwartet -Syntax Fehler, fügen Sie"} ", um ClassBody abzuschließen" Mache ich irgendwie in der alten Klasse ein Objekt der neuen Klasse? Tut mir leid, ich habe das noch nie gemacht – antobbo

+0

Sie haben nie Frühling verwendet oder Sie haben nie eine Java-Klasse gemacht, weil das ein Syntaxfehler ist, und sollte einfach mit jeder IDE herausfinden (Ich benutze Intellij, zum Beispiel) –

Antwort

0

Dies ist ein einfacher Fall von refactoring to extract a method und fügen Sie eine Klasse hinzu.

Sie wollen diesen

final Button button = new Button("Open popup"); 
JavaScript.getCurrent().execute("jsInit();"); 

Mit ähnlichen

final Button button = new Button("Open popup"); 
JavaScriptCaller jsCaller = new JavaScriptCaller(JavaScript.getCurrent()); 
jsCaller.jsInit(); 

So etwas ersetzen, können Sie wie eine Klasse definieren so

public class JavaScriptCaller extends AbstractJavaScriptComponent { 
    final JavaScript js; 

    public JavaScriptCaller(JavaScript js) { 
     this.js = js; 
    } 

    public void jsInit() { 
     this.js.execute("jsInit();") 
    } 
} 

Der Grund, warum ich die Parameter hinzugefügt sind Sie müssen also nicht ständig aufrufen, da Sie nur eine Instanz benötigen.

+0

Danke, ich habe den Code an der Spitze bearbeitet, um Ihnen meine Lösung zu zeigen, die wahrscheinlich nicht so effektiv ist wie Ihre, aber trotzdem funktioniert es: Ich habe ein FileUploader-Objekt in meiner MyUI-Klasse erstellt und rief die Methode auf, die die js-Funktion innerhalb des Click-Handlers aufruft – antobbo