Rejeitar um formulário sem recarregar a página em jogo 2.0.3
-
11-12-2019 - |
Pergunta
Em jogo framework, é possível rejeitar um campo
filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));
sem recarregar a página?
Eu tenho um arquivo do campo de entrada o que permite aos usuários selecionar os arquivos.Sobre a rejeitar e recarregar os arquivos são compensados e o erro é exibido.Eu quero os arquivos selecionados para estar lá
Comportamento atual:Antes de submeter o formulário:
Após o envio (com o erro:arquivos sumiram)
Solução
Arquivo selecione os campos de entrada (i.e. <input type="file" ... />
) são diferentes de outros campos de entrada -- você não pode pré-preencher o valor do lado do servidor.Seria uma enorme brecha de segurança se você poderia pensar em <input type="file" value="/etc/passwd" .. />
).No servidor, quando você obter o formulário enviado, você não receba o caminho completo para o arquivo que foi carregado, apenas o nome do arquivo e o conteúdo.
Se você realmente precisa para preservar o valor do seu arquivo do campo de entrada, você precisará ir para um caminho diferente:enviar o formulário via Ajax (google por "ajax upload de arquivo" para algumas técnicas e bibliotecas para ajudar com isso), e usar o Ajax resposta para indicar se o arquivo foi válido ou não.
Mais esclarecimentos:Com o HTML normal/método HTTP post (que o Jogo de formas auxiliares para usar), que a página original se foi, e a resposta do servidor é uma nova página com ligação para a página anterior.O Jogo formulários auxiliares preencherá automaticamente os campos de entrada sobre esta página com os valores anteriores, mas, como explicado acima, isso não é possível para um arquivo do campo de entrada.
É por isso que existem finalidade especial de bibliotecas Javascript para upload de arquivos.Se o formulário está principalmente preocupado em fazer o upload de arquivos, você deve olhar para estes.(e.g. http://fineuploader.com).No lado do servidor, o destino do Ajax consulta será uma nova Ação que apenas processa os arquivos carregados e retorna uma mensagem de sucesso/fracasso, o que seria, em seguida, exibir para o usuário.
Outras dicas
Se o servidor seria capaz de manipular o valor de um campo do arquivo, que seria um grande risco de segurança, como poderíamos tomar qualquer arquivo do usuário da unidade de disco rígido.Se olharmos para os dois requisitos que você tem,
- Obter o conteúdo do arquivo no servidor
- Não perturbe INTERFACE do usuário do cliente estado
a única opção é usar um AJAX uploader de arquivos.Assim, o fluxo torna-se agora:
- Envie o arquivo através de AJAX upload
- Validar o conteúdo
- Salve o arquivo para recuperação posterior
- Enviar de volta o status (OK ou Erro)
- Apresentar o erro em Erro
- Depois de todo o formulário é submetido, procure o arquivo salvo anteriormente
Provavelmente, você pode enganar um pouco, se você não mente a carga apenas fazer a validação com AJAX para exibir a mensagem de erro e permitir que o arquivo seja carregado novamente em um normal em enviar.
É tudo sobre como trabalhar com os limites que temos.