powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение изменений в коллекции в Struts
19 сообщений из 19, страница 1 из 1
Сохранение изменений в коллекции в Struts
    #32910396
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть форма, в которой выводится информация о нескольких пользователях.
И эту информацию можно редактировать.
А как сохранять эти изменения? У меня, когда я нажимаю кнопку сохранения на страничке, происходит переход на Action и в ActionForm находятся старые данные...
Подскажите, где грабли?
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32910477
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверьте, находятся ли ваши fields в форме.
на стрaничке
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<html:form action="/myAction">
  <html:text maxlength="2" size="2" property="day" />
</html:form>
Тогда присвоение новых данных проиcxодит автоматически при отсылке формуляра. 
в ActionForm
 public   class  MyForm  extends  ActionForm {
    
  private  String day;

  public  String getDay() {
      
         return  day;
    }

     public   void  setDay(String day) {
         this .day = day;
    }
}
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32910512
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не совсем так - у меня есть itteration

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<logic:iterate name="permitListForm" property="permitsList" 
                     id="permitBean" indexId="index">
 ...
    <tr>
        <td>
            <bean:write name="permitBean" property="dealerName" />
        </td>
     </tr>
</logic:iterate>

А в permitListForm следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 private  List permitsList =  new  ArrayList();

     public  List getPermitsList() {
         return  permitsList;
    }

     public   void  setPermitsList(List permitsList) {
         this .permitsList = permitsList;
    }

     public  PermitBean getPermitBean( int  index) {
         return  (PermitBean) permitsList.get(index);
    }

     public   void  setPermitBean( int  index, PermitBean permitBean) {
        permitsList.set(index, permitBean);
    }

В permitBean есть get/set на dealerName.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32910619
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<bean:write> просто выводит значение. Допустим, ты редактируешь его через <html:text>. Тогда в JSP можно написать примерно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<logic:iterate name="permitListForm" property="permitsList" id="permitBean" indexId="index">
  <tr>
    <td>
      <html:text name="permitListForm" property='<%="permitsList[" + index + "].dealerName"%>'/>
    </td>
</tr>
</logic:iterate>

И по-моему методы getPermitBean(int index) и setPermitBean(int index, PermitBean permitBean) не используются, их можно убрать, по крайней мере в Struts 1.2.4.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32910739
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не пользуюсь logic:iterate, в будущем планируется совсем убрать logic из Struts

"Note: - Many of the features in this taglib are also available in the JavaServer Pages Standard Tag Library (JSTL). The Struts team encourages the use of the standard tags over the Struts specific tags when possible."

для коллекций я использую следущее:
Код: plaintext
1.
2.
3.
4.
<c:forEach items="${myForm.myList}" var="element" varStatus="status">                           
 <td><input name="myList[${status.count - 1}].myField"   value='${element.myField}'/> </td>   
 </c:forEach>

...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32910856
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, помогло
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911565
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как сохранять boolean значения из checkbox?
У меня они всегда true.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911644
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменная должна быть типа boolean
у ActionForm есть метод специально для reset
в нем необходимо присвоить checkbox значение false.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public   class  MyForm  extends  ActionForm {

 private   boolean  isChecked ;
.....
}
 public   void  reset(ActionMapping actionMapping, HttpServletRequest request) {
        // Checkbox reset
         super .reset(actionMapping, request);
        isChecked.reset();

}
в request посылается только значение checkbox если он выбран isCheked = true
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911709
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, конечно, извиняюсь, но какой может быть метод у примитива boolean ?:)
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911848
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Denis Popov, конечно же
Код: plaintext
1.
isChecked = false;
просто у меня вместо переменной isChecked свой класс Checkbox у которого есть метод reset
sorry
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911881
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть аттрибут с типом класса Boolean.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<logic:iterate name="permitListForm" property="permitsList" id="permitBean" indexId="index">
  <tr>
    <td>
      <html:checkbox name="permitListForm" property='<%="permitsList[" + index + "].dealerEnabled"%>'/>
    </td>
</tr>
</logic:iterate>

И этот аттрибут у меня не изменяется: если был true(false), то он таковым и остается. Он в setDealerEnabled приходит неизменным.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911946
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй указать значение:

Код: plaintext
1.
2.
3.
<html:checkbox name="permitListForm" 
               property='<%="permitsList[" + index + "].dealerEnabled"%>'
               value="true"/>

Можешь еще использовать boolean вместо Boolean , хотя в данном случае ИМХО это без разницы.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911955
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам нужно in PermitsList каждое значениe
Код: plaintext
dealerEnabled = false

в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public   class  MyForm  extends  ActionForm{
....
// Синтакс Java1.5
 public   void  reset(ActionMapping actionMapping, HttpServletRequest request) {
    // Checkbox reset
     super .reset(actionMapping, request);
     for  (MyBean myBean:permitsList) {
      myBean.setDealerEnabled(false);
    }
  }
}
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32911971
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
checkbox

Renders an HTML <input> element of type checkbox, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.


NOTE: The underlying property value associated with this field should be of type boolean, and any value you specify should correspond to one of the Strings that indicate a true value ("true", "yes", or "on"). If you wish to utilize a set of related String values, consider using the multibox tag.


WARNING: In order to correctly recognize unchecked checkboxes, the ActionForm bean associated with this form must include a statement setting the corresponding boolean property to false in the reset() method.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32912236
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело, что мне нельзя сбрасывать значения, т.к. нужно отобразить то, что есть в базе, а затем записать изменения.
Если же применить reset, то отображаться правильно не будет.
Применить value="true"("false") тоже не могу, т.к. изменения будут приходить только частично.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32912342
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему отображение тут ни при чем, этот метод вызовется при Submit'е формы. Соответственно, если у тебя на форме что-то отображено, то оно и запишется потом в качестве значения. А reset() "подготовит почву". Конечно, не стоит в этом методе переопределять значения атрибутов формы, которые не указаны на данной jsp-странице. Но для boolean concat уже приводил цитату.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32912452
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
метод reset вызывается перед тем, как заполняются поля формы.
и при отправке формуляра, непосредственно перед передачей изменненных параметров. Поэтому все прекрасно работает и данные из базы отображаются правильно. Этот метод reset нужен для того, чтобы "In order to correctly recognize unchecked checkboxes, the ActionForm bean associated with this form must include a statement setting the corresponding boolean property to false in the reset() method." - т.е. правильно опознать невыбранные чекбоксы.
исторически сложилось тak, что передаче значения чекбокса в реквесте стоят только параметры выбранных чекбоксов. Поэтому немного неудобно работать с ними, пока не разберешься что к чему.
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32912469
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JSP
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<html:html>
<html:form action="/testCheckbox">
    <body>
    <c:forEach items="${TestCheckboxForm.permitsList}" var="permits" varStatus="status">

    <br>
       <input type="checkbox" name="permitsList[${status.count - 1}].dealerEnabled"
       value="true" ${permits.dealerEnabled eq 'true' ? 'checked' : ''} /> ${permits.dealerEnabled}
     </c:forEach>
     <br>
     <html:submit property="event" styleId="button"><bean:message key="button.ok"/></html:submit>
   </body>
    <html:hidden property="method" value="updateForm" />    
  </html:form>
 </html:html>

Form
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 public   class  TestCheckboxForm  extends  ActionForm{
   private  List permitsList =  new  ArrayList();  

   public  List getPermitsList() {
     return  permitsList;
  }

   public   void  setPermitsList(List permitsList) {
     this .permitsList = permitsList;
  }

  public   void  reset(ActionMapping actionMapping, HttpServletRequest request) {
   System.out.println("TestCheckboxForm.reset");
    // Checkbox reset
     super .reset(actionMapping, request);
   System.out.println("permitsList.size() = " + permitsList.size());

   for  ( int  i =  0 ; i < permitsList.size(); i++) {
    PermitBean permitBean = (PermitBean) permitsList.get(i);
    permitBean.setDealerEnabled(false);
  }
 }
}
Action
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
 public   class  TestAction  extends  LookupDispatchAction {

   protected  Map getKeyMethodMap() {
    Map map =  new  HashMap();
    map.put("button.update.form", "updateForm");
    map.put("button.ok", "updateForm");
     return  map;

  }
    protected  ActionForward unspecified(ActionMapping mapping,
                                      ActionForm actionForm,
                                      HttpServletRequest request,
                                      HttpServletResponse response)
           throws  Exception {
     System.out.println("TestAction.unspecified");
   TestCheckboxForm form=(TestCheckboxForm) actionForm;
   List list =  new  ArrayList();
      for  ( int  i= 0 ; i<= 10 ;i++){
       PermitBean bean=  new  PermitBean();
        if (i% 2 == 0 ){
         bean.setDealerEnabled(false);
       }  else {
         bean.setDealerEnabled(true);
       }
       list.add(bean);
     }
     form.setPermitsList(list);

      return  mapping.findForward("success");
  }

   public  ActionForward updateForm(ActionMapping actionMapping,
                                   ActionForm actionForm,
                                   HttpServletRequest request,
                                   HttpServletResponse httpServletResponse)  throws  Exception {
    System.out.println("TestAction.updateForm");
    TestCheckboxForm form=(TestCheckboxForm) actionForm;
    System.out.println("form.getPermitsList().size() = " + form.getPermitsList().size());
     for  ( int  i =  0 ; i < form.getPermitsList().size(); i++) {
      PermitBean permitBean = (PermitBean) form.getPermitsList().get(i);
      System.out.println("permitBean.isDealerEnabled() = " + permitBean.isDealerEnabled());


    }
      return  (actionMapping.findForward("success"));
   }

}


Bean
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public   class  PermitBean  implements  Serializable{
     boolean  dealerEnabled=false;

    public   boolean  isDealerEnabled() {
      return  dealerEnabled;
   }

    public   void  setDealerEnabled( boolean  dealerEnabled) {
      this .dealerEnabled = dealerEnabled;
   }

}

struts-config.xml

Код: plaintext
1.
2.
3.
<action path="/testCheckbox" type="bla.action.TestAction"
      name="TestCheckboxForm" validate="false" scope="session" input="/testCheckbox.jsp" parameter="method">
      <forward name="success" path="/testCheckbox.jsp" redirect="false"/>
    </action>

все работает
...
Рейтинг: 0 / 0
Сохранение изменений в коллекции в Struts
    #32915784
Evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, я попробую
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение изменений в коллекции в Struts
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]