Вопрос

в Play Framework, возможно ли отклонить поле

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

без перезагрузки страницы?

У меня есть поле ввода файла, которое позволяет пользователям выбирать файлы.На отклонении и перезагрузке файлы очищены, и отображается ошибка.Я хочу, чтобы файлы, которые они выбрали, чтобы быть там

Текущее поведение: Перед отправкой формы:

раньше

После отправки (с ошибкой: файлы ушли)

раньше

Это было полезно?

Решение

Файл Выбрать поля ввода (I.E. <input type="file" ... />) отличаются от других полей ввода - вы не можете предварительно заполнить значение на стороне сервера. Это было бы массивной безопасности, если вы могли бы (подумать о <input type="file" value="/etc/passwd" .. />). На сервере, когда вы получаете представленную форму, вы не получаете полный путь к файлу, которое было загружено, просто имя файла и содержимого.

Если вам действительно нужно сохранить значение поля ввода файла, вам нужно будет пойти по другому маршруту: отправьте форму через ajax (Google для файла Ajax для некоторых методов и библиотек, чтобы помочь с этим), и используйте ответ AJAX, чтобы указать, был ли файл действителен или нет.


Дальнейшее разъяснение: с нормальным методом HTML / HTTP Post (который использует Play Forms Hempers), исходная страница отсутствует, а ответ сервера - это новая страница без подключения к предыдущей странице. Помогитеры Play Forms будут предварительно заполнить поля ввода на этой странице с предыдущими значениями, но, как описано выше, это невозможно для поля ввода файла.

Вот почему есть специальные библиотеки JavaScript для загрузки файлов. Если ваша форма в первую очередь связана с выполнением загрузки файлов, вы должны посмотреть на них. (E.g. http://fineuploader.com ). На стороне сервера цель запроса AJAX будет новым действием, которое просто обрабатывает загруженные файлы и возвращает сообщение об успехе / отказом, которое вы затем отображаете пользователю.

Другие советы

Если сервер сможет управлять значением файлового поля, это было бы основным риском безопасности, поскольку мы могли бы взять любой файл с пользовательского жесткого диска.Если мы посмотрим на два требования, которые у вас есть,

    .
  • Получить содержимое файла на сервере
  • не беспокоить клиента UI состояния

    Единственный вариант - использовать файл AJAX.Таким образом, ваш поток сейчас становится:

      .
    • Отправить файл через ajax Загрузить
    • подтвердить содержимое
    • Сохранить файл для последующего поиска
    • Отправьте статус (OK или ошибка)
    • Показать ошибку по ошибке
    • После того, как вся форма представлена, посмотрите ранее сохраненный файл

      Вы, вероятно, можете немного изменять, если вы не против нагрузки - просто сделайте проверку с AJAX, чтобы отобразить сообщение об ошибке, и пусть файл снова будет загружено на нормальном представлении.

      Это все о работе с ограничениями, которые у нас есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top