2012-03-19 5 views
0

Я использую фреймворк проверки с помощью Struts 1.1. При неудачной проверке вся форма сбрасывается.Почему struts меняет форму после неудачной проверки?

После много времени обыскивая сеть, я собрал:

  1. Когда новый запрос получен, объект формы создается, если он не существует в текущей области (запрос или сессии).
  2. Сброс вызван()
  3. Значения форм заполняются из свойств компонента.
  4. Подтверждение начинается, если включено
  5. Если проверка не завершена, возвращаются ActionErrors и запрос направляется в URI, заданный атрибутом ввода тега действия в моей 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"> 
+0

Я не уверен на 100%, что вы просите; вы спрашиваете, для каких значений формы они установлены в 'reset()', метод, используемый для сброса значений формы? –

+0

Да. Значения формы устанавливаются на то, что находится в методе reset(), даже если только одно поле неверно. Как я могу получить форму для отображения свойств, которые не требуют проверки или прошли проверку, поэтому пользователю не нужно повторно вводить данные для всей формы, если только одно поле не проходит проверку? – Bizmarck

+0

Не сбрасывайте все. –

ответ

0

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

1

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

1
@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); 
} 
Смежные вопросы