Вопрос

Я немного новичок в Play Framework, но я не вижу никакой документации о том, как приблизиться к этому. По сути, у меня есть форма для загрузки текстового файла на сервер, вот соответствующие фрагмент:

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

На стороне контроллера вот метод загрузки:

public static void upload(File sprocketFile) {
}

Моя проблема заключается в том, что если пользователь не задохнет заполнить форму и просто попадает в «Отправить звездочку», воспроизведение автоматически генерирует NPE, поскольку он пытается преобразовать данные формы в файл. Как я могу обойти это? Это происходит еще до того, как код проверки контроллера пинает, поэтому просто бросает @required не помогает:

@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

Мой конечный гол состоит в том, чтобы показать симпатичное сообщение об ошибке обратно пользователю, но играйте, не мешают мне это сделать. Это с воспроизведением 1.1 на ОС X, если это имеет значение.

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

Решение 3

Я нашел источник проблемы, и это моя собственная вина. Вопрос под рукой, естественно, является частью источника, которую я не включал в оригинальный вопрос. Вот образец код:

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

Вопрос использовал растительную букву в качестве последнего параметра в Validation.AdderROR (). Я обнаружил это при запуске приложения в режиме отладки в NetBeans. Спасибо за вашу помощь @niels.

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

Возможный обходной путь был бы @ перед перехватчиком. Там вы можете проверить напунктер и перенаправить на страницу ошибки. Это должно работать. Пожалуйста, создайте билет на http://play.lighthouseapp.com. с небольшим примером приложения.

Вы формы и контроллер не совпадают

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

Говорит, что вы загружаете объект файла в переменную с именем sprocketFile

Но ваш код говорит, что вы храните в объекте с именем licenceFile

public static void upload(File licenseFile) {

Попробуйте сделать два матча.

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