Struts 1 Losing Request Parameters после неудачной проверки формы с помощью Multipart/Form-Data Enctype

У меня простая форма Struts. Он имеет несколько текстовых полей и поле файла. enctype - это multipart/form-data в моей форме. Я проверяю в actionform метод проверки. Если текстовые поля пусты, я возвращаю ошибки, которые они необходимы. Наряду с видимыми полями я передаю несколько скрытых полей, которые необходимы в качестве параметров запроса, когда форма обрабатывается и возвращается в JSP. JSP нуждается в этих запросах params .

Все работает отлично, когда нет ошибок проверки, поскольку запрос params возвращается с помощью класса ActionRedirect в действии. Но если появляются ошибки, я теряю запрос params . (Я могу получить доступ их в методе проверки actionform или в действии).

Как я могу убедиться, что запрос params передан вернуться к ошибке проверки в форме multipart ? Есть ли какое-нибудь решение?

Отображения действий (слегка отредактированные для обфускации) ниже:

   
    
    
  
  
      
  

И моя линия формы JSP:


2
nl ja de
Являются ли эти скрытые поля также свойствами ActionForm?
добавлено автор Jörn Horstmann, источник
@eipark, вы не передаете параметры для отправки, поэтому ваши параметры пропущены.
добавлено автор Roman C, источник
Вы внедряете метод reset() в своей форме?
добавлено автор Claudio, источник
можете ли вы показать нам важные части вашего кода? (для меня это были бы связанные действия-отображения в файле struts-config)
добавлено автор Th0rndike, источник
Я столкнулся с этой проблемой раньше. Я не могу помочь вам, не зная о вашем коде. Начиная с отображения действия.
добавлено автор Th0rndike, источник
Th0rndike Я не могу вставить код здесь, но у меня есть правильный ввод, имя и пересылка. Мой struts-config.xml в порядке ... все работает, за исключением случаев, когда у меня есть данные multipart/form и проверка завершается с ошибкой. Хорстманн - да.
добавлено автор eipark, источник
Я так не считаю Клаудио.
добавлено автор eipark, источник
Роман - что ты имеешь в виду? Все мои параметры формы, безусловно, передаются в действие. У меня только эта проблема, когда проверка формы не удалась.
добавлено автор eipark, источник
Добавлено в вопрос.
добавлено автор eipark, источник

1 ответы

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

  • Change the scope to session: This way the data will be stored in session and you won't lose any data.
  • Implement the reset method of your validation: This way, when the reset method is called in your validation, you can repopulate the data of the form.

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

1
добавлено
Первый вопрос: вы найдете форму в сеансе, и ожидается, что форма находится в сеансе. Если вы используете одну и ту же форму несколько раз, это может вызвать проблемы (кроме обычных проблем, которые создает сеанс, обязательно посмотрите). Второй вопрос: метод сброса вызывается перед заполнением формы (перед вызовом методов setter ваших бобов)
добавлено автор Th0rndike, источник
Это именно то, что я имел в виду. Однако я понимаю, что это не решение в вашем случае, если вы не используете ту же форму для обоих действий.
добавлено автор Th0rndike, источник
Существуют ли какие-либо побочные эффекты или другие последствия изменения сферы действия от запроса к сеансу? И этот сброс вызывается после проверки, но до того, как мои значения формы исчезнут? Как я на самом деле должен переписывать данные формы - это либо в запросе, либо это неправильно? Если это не в моем запросе, я не имею никакого понятия, чтобы различать код, какие идентификаторы и другие переменные я хотел.
добавлено автор eipark, источник
Для решения сброса я не совсем понимаю, как это может мне помочь. Сброс вызывается в самом начале перед проверкой - как я должен передавать некоторую переменную, которая мне нужна из формы, в действие, к которому я перенаправлен после неудачной проверки, когда значения формы все обращаются в нуль между этими двумя шаги? Вы говорите, что используете компонент, который является общим для Action после этого, и устанавливайте его переменные из сброса, чтобы он сохранялся где-то помимо формы (что потребовало бы изменения моего кода действия)?
добавлено автор eipark, источник
Разве это не требует какого-то одноэлементного боба? У меня нет доступа к каким-либо переменным в моем действии после проверки после сброса.
добавлено автор eipark, источник
Оказывается, использование метода сброса не предлагается - по крайней мере неявно - с помощью Java Doc: struts.apache.org/1.x/apidocs/org/apache/struts/action/… , javax .servlet.ServletRequest). Похоже, нет никакого изящного, реального решения этой проблемы, кроме хакерских обходных решений в моем пользовательском интерфейсе (например, разделение форм).
добавлено автор eipark, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async