Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение изменений в коллекции в Struts / 19 сообщений из 19, страница 1 из 1
10.02.2005, 15:39
    #32910396
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Есть форма, в которой выводится информация о нескольких пользователях.
И эту информацию можно редактировать.
А как сохранять эти изменения? У меня, когда я нажимаю кнопку сохранения на страничке, происходит переход на Action и в ActionForm находятся старые данные...
Подскажите, где грабли?
...
Рейтинг: 0 / 0
10.02.2005, 16:13
    #32910477
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Проверьте, находятся ли ваши 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
10.02.2005, 16:23
    #32910512
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
У меня не совсем так - у меня есть 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
10.02.2005, 16:54
    #32910619
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
<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
10.02.2005, 17:42
    #32910739
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
я не пользуюсь 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
10.02.2005, 18:31
    #32910856
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Спасибо, помогло
...
Рейтинг: 0 / 0
11.02.2005, 13:17
    #32911565
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
А как сохранять boolean значения из checkbox?
У меня они всегда true.
...
Рейтинг: 0 / 0
11.02.2005, 13:48
    #32911644
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Переменная должна быть типа 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
11.02.2005, 14:08
    #32911709
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Я, конечно, извиняюсь, но какой может быть метод у примитива boolean ?:)
...
Рейтинг: 0 / 0
11.02.2005, 14:45
    #32911848
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Спасибо Denis Popov, конечно же
Код: plaintext
1.
isChecked = false;
просто у меня вместо переменной isChecked свой класс Checkbox у которого есть метод reset
sorry
...
Рейтинг: 0 / 0
11.02.2005, 14:56
    #32911881
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
У меня есть аттрибут с типом класса 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
11.02.2005, 15:16
    #32911946
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Попробуй указать значение:

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

Можешь еще использовать boolean вместо Boolean , хотя в данном случае ИМХО это без разницы.
...
Рейтинг: 0 / 0
11.02.2005, 15:20
    #32911955
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Вам нужно 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
11.02.2005, 15:25
    #32911971
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
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
11.02.2005, 16:55
    #32912236
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
В том то и дело, что мне нельзя сбрасывать значения, т.к. нужно отобразить то, что есть в базе, а затем записать изменения.
Если же применить reset, то отображаться правильно не будет.
Применить value="true"("false") тоже не могу, т.к. изменения будут приходить только частично.
...
Рейтинг: 0 / 0
11.02.2005, 17:41
    #32912342
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
По-моему отображение тут ни при чем, этот метод вызовется при Submit'е формы. Соответственно, если у тебя на форме что-то отображено, то оно и запишется потом в качестве значения. А reset() "подготовит почву". Конечно, не стоит в этом методе переопределять значения атрибутов формы, которые не указаны на данной jsp-странице. Но для boolean concat уже приводил цитату.
...
Рейтинг: 0 / 0
11.02.2005, 18:44
    #32912452
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
метод 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
11.02.2005, 18:55
    #32912469
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
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
15.02.2005, 10:42
    #32915784
Evgene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений в коллекции в Struts
Спасибо, я попробую
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение изменений в коллекции в Struts / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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