Frage

Ich bin ein bisschen ein Neuling auf der Play-Framework, aber ich sehe keine Dokumentation darüber, wie dies zu nähern. Im Grunde habe ich eine Form bekam eine Textdatei auf den Server, hier ist der entsprechende Code-Schnipsel laden:

#{form @Sprockets.upload() , enctype:'multipart/form-data' }
  <input type="file" name="sprocketFile" size="chars" />
  <input type="submit" value="Submit Sprocket" />
#{/form}

Auf der Steuerungsseite, hier ist die Upload-Methode:

public static void upload(File sprocketFile) {
}

Mein Problem ist, dass, wenn der Benutzer nicht stört die Form bevölkert und nur Hits „Submit Sprocket“, Wiedergabe automatisch eine NPE erzeugt, wie es die Formulardaten in eine Datei zu konvertieren versucht. Wie kann ich dieses Problem umgehen? Dies geschieht auch vor den Controller Validierungscode Kicks, so einfach in einem @Required wirft nicht hilft:

@64m30kf1p
Internal Server Error (500) for request POST /sprockets/upload

Oops: NullPointerException
An unexpected error occured caused by exception NullPointerException: null

play.exceptions.UnexpectedException: Errors serializationProblem
    at play.data.validation.ValidationPlugin.save(ValidationPlugin.java:146)
    at play.data.validation.ValidationPlugin.onActionInvocationResult(ValidationPlugin.java:65)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:293)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.data.validation.ValidationPlugin.save(ValidationPlugin.java:136)
    ... 3 more

Mein Endziel ist eine ziemlich Fehlermeldung zurück an den Benutzer zu zeigen, aber Spiele hindern mich dies zu tun. Dies ist mit Play 1.1 auf OS X, wenn es einen Unterschied macht.

War es hilfreich?

Lösung 3

Ich habe die Ursache des Problems gefunden, und es ist meine eigene Schuld. Das Problem bei der Hand ist natürlich Teil der Quelle, die ich nicht in der ursprünglichen Frage enthalten war. Hier ist der Beispielcode:

public static void upload(@Required File sprocketFile) {
try {           
  if (sprocketFile == null || validation.hasErrors()) {
    validation.addError("Upload Error", "Please select a sprocket to upload", sprocketFile);
    params.flash();
    validation.keep();                          
    index();
}

Das Problem wurde mit der sprocketFile als letzte Parameter in validation.addError (). Ich entdeckte dies, während die App im Debug-Modus in NetBeans läuft. Danke für Ihre Hilfe @niels.

Andere Tipps

Mögliche Abhilfe würde ein @ Vor-Interceptor sein. Dort können Sie die Paramter und Umleitung auf eine Fehlerseite überprüfen. Das sollte funktionieren. Bitte legen Sie ein Ticket an http://play.lighthouseapp.com mit einer kleinen Beispiel-Anwendung.

Sie bilden und Controller nicht übereinstimmen

<input type="file" name="sprocketFile" size="chars" />

sagt, dass Sie ein File-Objekt auf eine Variable mit dem Namen sprocketFile Hochladen

Aber Ihr Code sagt, Sie in einem Objekt namens licenceFile werden Speichern

public static void upload(File licenseFile) {

Versuchen Sie, die zwei Spiele zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top