Domanda

In Play Framework, è possibile rifiutare un campo

filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));
.

senza ricaricare la pagina?

Ho un campo di ingresso file che consente agli utenti di selezionare i file.Sul rifiuto e ricaricare, i file vengono cancellati e viene visualizzato l'errore.Voglio i file che hanno scelto per esserci

Comportamento corrente: Prima di inviare il modulo:

before

Dopo l'invio (con errore: i file sono andati)

before

È stato utile?

Soluzione

File Selezionare Seleziona campi di ingresso (I.E. <input type="file" ... />) sono diversi da altri campi di ingresso: non è possibile pre-popolare il valore dal lato server. Sarebbe un enorme buco di sicurezza se potessi (pensare a <input type="file" value="/etc/passwd" .. />). Al server, quando si ottiene il modulo inviato, non si ottiene il percorso completo del file che è stato caricato, solo il nome del file e il contenuto.

Se hai davvero bisogno di preservare il valore del campo di immissione del file, è necessario effettuare una rotta diversa: inviare il modulo tramite Ajax (Google per "Ajax File caricamento" per alcune tecniche e librerie per aiutare con questo), e utilizzare la risposta AJAX per indicare se il file era valido o meno.


.

Ulteriori chiarimenti: con il normale metodo POST HTML / HTTP (che i moduli di gioco si aiutano ad usare), la pagina originale è sparita, e la risposta del server è una nuova pagina senza connessione alla pagina precedente. Gli aiutanti dei moduli di gioco pre-popolano i campi di input su questa pagina con i valori precedenti, ma come spiegato sopra questo non è possibile per un campo di immissione del file.

Ecco perché ci sono librerie JavaScript speciali per il caricamento dei file. Se il tuo modulo è principalmente interessato a fare caricamenti file, dovresti guardarli. (ad esempio http://fineupploader.com ). Sul lato server, il target della query AJAX sarà una nuova azione che elabora solo i file caricati e restituisce un messaggio di successo / guasto, che si visualizza quindi all'utente.

Altri suggerimenti

Se il server sarebbe in grado di manipolare il valore di un campo di file, che sarebbe un importante rischio di sicurezza in quanto potevamo prendere qualsiasi file dal disco rigido dell'utente.Se guardiamo i due requisiti che hai,

    .
  • Ottieni il contenuto del file sul server
  • Non disturbare il client UI State

    L'unica opzione è utilizzare un uploader di file AJAX.Quindi il tuo flusso ora diventa:

      .
    • Invia il file tramite Ajax Upload
    • Convalidare il contenuto
    • Salva il file per il recupero successivo
    • Invia lo stato (OK o ERRORE)
    • Visualizza l'errore sull'errore
    • Dopo aver inviato l'intera forma, cerca il file precedentemente salvato

      Puoi probabilmente imbrogliare un po 'se non ti dispiace il carico - basta fare la convalida con Ajax per visualizzare il messaggio di errore e lasciare che il file venga caricato di nuovo su una modalità normale.

      È tutto sul lavoro con i limiti che abbiamo.

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