Domanda

io sono un po 'di un novizio di Play quadro, ma non vedo alcuna documentazione su come affrontare questo. Fondamentalmente ho un modulo per caricare un file di testo al server, ecco il frammento in questione:

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

Dal punto di vista di controllo, ecco il metodo di caricamento:

public static void upload(File sprocketFile) {
}

Il mio problema è che se l'utente non si preoccupa popolando la forma e colpisce solo "Invia Sprocket", Gioca automagicamente genera un NPE in quanto cerca di convertire i dati del modulo in un file. Come posso ovviare a questo? Questo accade anche prima dei calci di codice di convalida del controller in, così semplicemente gettando in un @Required non aiuta:

@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

Il mio obiettivo finale è quello di mostrare un bel messaggio di errore indietro per l'utente, ma il gioco mi impedisce di fare questo. Questo è con Play 1.1 su OS X, se si fa la differenza.

È stato utile?

Soluzione 3

Ho trovato la fonte del problema, ed è colpa mia. La questione a portata di mano è naturalmente parte della sorgente non ho incluso nella domanda iniziale. Ecco il codice di esempio:

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();
}

Il problema stava usando lo sprocketFile come ultimo parametro a validation.addError (). Ho scoperto questo durante l'esecuzione l'applicazione in modalità di debug in NetBeans. Grazie per il vostro aiuto @niels.

Altri suggerimenti

possibile soluzione sarebbe un @ Prima-Interceptor. Ci si può controllare la paramter e reindirizzamento ad una pagina di errore. Questo dovrebbe funzionare. Si prega di creare un biglietto a http://play.lighthouseapp.com con un piccolo esempio di applicazione.

Si forma e il controller non corrispondono

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

Dice che si sta caricando un oggetto File a un nome sprocketFile variabile

Ma, il codice dice si archiviano in un oggetto denominato licenceFile

public static void upload(File licenseFile) {

Prova a fare i due partita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top