2014-07-01 2 views
1

Я пытаюсь обновить DataView благодаря функции onSubmit в ajaxButton. Я создаю форму с двумя DropDownChoice и AjaxButton.WICKET - обновление DataView с помощью ajaxButton

Когда я нажимаю на ajaxButton в функции onSubmit, я вызываю функцию DAO, и я бы хотел заменить мой ListDataProvider, который был пустым раньше, с новым списком из DAO.

final private WebMarkupContainer wmc = new WebMarkupContainer("wmc"); 
private ListDataProvider<ComparePhoto> dataP = new ListDataProvider<ComparePhoto>(); 

dataView = (DataView<ComparePhoto>)new DataView<ComparePhoto>("vcomponents", dataP){ 

     private static final long serialVersionUID = 1L; 

     @Override 
     protected void populateItem(final Item<ComparePhoto> item) { 

       ComparePhoto c = item.getModelObject(); 

       System.out.println("idCarto : "+c.getIdCarto()); 

       RepeatingView repeatingView = new RepeatingView("dataRow"); 
       repeatingView.add(new Label(repeatingView.newChildId(), c.getIdCarto())); 
       [...] 

       item.add(repeatingView); 
     } 
    }; 

    dataView.setOutputMarkupId(true); 
    wmc.setOutputMarkupId(true); 
    wmc.add(dataView); 
    add(wmc); 

      AjaxButton b = new AjaxButton("btnSubmit") { 

       protected void onSubmit(AjaxRequestTarget target, Form<?> form) 
       { 
        dataP = new ListDataProvider<ComparePhoto>(lstComparePhoto); 

       target.add(wmc); 
       } 
      } 

form.add(b); 
add(form); 

мой HTML код:

<form wicket:id="formComparePicture"> 
       <div align="center"><label for="dateChoiceOne"><select wicket:id="dateOne"></select></label></div><br/> 
       <div align="center"><label for="dateChoiceTwo"><select wicket:id="dateTwo"></select></label></div><br/> 

       <button wicket:id="btnSubmit">compare</button> 
       <br/><br/><br/> 
      </form> 

      <div wicket:id="wmc"> 
       <div wicket:id="feedback"></div> 
       <table id="componentTable"> 
        <thead> 
         <tr> 
          <th>id</th> 

         </tr> 
        </thead> 
        <tfoot> 
         <tr> 
          <th>id</th> 
         </tr> 
        </tfoot> 

        <tbody> 

         <tr wicket:id="vcomponents"> 
          <td wicket:id="dataRow"></td> 
         </tr> 

        </tbody> 
       </table> 
      </div> 

Абсолютно ничего не случится ...

спасибо за вашу помощь

+0

Как «dataView» знает, что поставщик изменился? Это не так. – RobAu

+0

Хорошо, но как я могу это решить? У dataview нет функции для провайдера?! – user2773057

ответ

1

Вы должны переопределить ListDataProvider # GetData(), чтобы всегда обеспечивать вверх к настоящему списку:

private List<ComparePhoto> photos = new List<ComparePhoto>(); 

... 

ListDataProvider<ComparePhoto> dataP = new ListDataProvider<ComparePhoto>() { 
    protected List<T> getData() { 
     return photos; 
    } 
}; 

dataView = new DataView<ComparePhoto>("vcomponents", dataP) { 
    ... 
}; 

AjaxButton b = new AjaxButton("btnSubmit") { 
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) 
    { 
     photos = ...; 

     target.add(wmc); 
    } 
}; 
+0

Thaaaanks !!! Вы спасли мою жизнь ! два дня я пытаюсь найти ошибку! – user2773057

Смежные вопросы