WICKET - Обновление DataView с помощью ajaxButton

1

Я пытаюсь обновить DataView благодаря функции onSubmit в ajaxButton. Я создаю форму с двумя DropDownChoice и 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 узнает, что провайдер изменился? Это не так.
  • 0
    Хорошо, но как я могу решить это? У dataview нет функции для набора провайдеров ?!
Теги:
wicket
refresh

1 ответ

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 !!! Вы спасли мою жизнь ! два дня пытаюсь найти ошибку!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню