почему стойки сбрасывают мою форму после неудачной проверки? - PullRequest
1 голос
/ 19 марта 2012

Я использую платформу валидации со Struts 1.1. При сбое валидации сбрасывается вся форма.

После долгих поисков в сети я собрал:

  1. При получении нового запроса создается объект формы, если он не существует в текущей области (запрос илисеанс).
  2. Вызов сброса ()
  3. Значения формы заполняются из свойств bean-компонента.
  4. Проверка запускается, если включена
  5. Если проверка не проходит, ActionErrorsвозвращаются и запрос направляется на URI, заданный атрибутом input тега action в моем struts-config.xml.

Вот где у меня проблема.Если проверка не удалась, и я установил параметр ввода на той же странице, метод reset () вызывается снова, но он не использует значения bean-компонента с момента первоначальной загрузки формы.Таким образом, пользователь должен повторно ввести все.

Мой класс отображения действий для этого действия выглядит следующим образом:

<action
  path="/edit/componentRelease"
  type="org.twdata.struts.SpringAction"
  name="edit/componentRelease"
  scope="request"
  input="/WEB-INF/jsp/edit/editComponentRelease.jsp"
  parameter="edit/componentRelease"
  validate="true"
>
  <forward
    name="edit/componentRelease"
    path="/WEB-INF/jsp/edit/editComponentRelease.jsp"
    redirect="false"
  />
</action>

Форма, используемая для отображения компонента, начинается с:

<html:form method="post" name="componentReleaseEditor" type="com.mx.releasemgr.forms.ComponentReleaseEditorForm" action="/edit/componentRelease">

Ответы [ 3 ]

1 голос
/ 28 марта 2014

метод reset () используется для очистки ранее введенных значений ... если вы отладите его и увидите, то узнаете. Например, если вы вводите 1 в форме и говорите «отправить», снова приходите в ту же форму, вводите 2 и снова отправляете сейчас, что будет делать сброс, это очистит 1, а теперь 2, и, таким образом, вы получите 2 в части ur validate ().

1 голос
/ 21 марта 2015
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {

    //If Clear button click will set date as today and clear all other value
    //If Insert, update with validation as failure than not clear all value on the form, but only clear that wrong when validation (means skipp all value as true on the form and only clear value wrong)
    String actionName = request.getParameter("method");
    if(actionName!=null){
        if (actionName.equals(Enums.ActionName.CLEAR.getActionName())) {
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            this.setPublicationDay(dateFormat.format(date));
        }
        else{
            request.setAttribute("book", this);
        }
    }

    super.reset(mapping, request);
}
0 голосов
/ 10 декабря 2013

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

...