Добавление новых элементов в просмотр списка с помощью ajax submit - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь создать поиск по дате.Я пробовал так много разных способов перекрасить таблицу Ajax с помощью listview.просмотр списка работает нормально, пока я использую, загружает страницу - но когда попробуйте добавить ее в ajaxsubmit buttun - у меня есть созданная разметка, например, -18 создана новая строка - но данных там нет.Итак, вопрос заключается в том, как добавить данные в теги просмотра списка с поддержкой ajax?

===================

final ListView logTableListView = new ListView<SyslogParsed>("List"){

            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(ListItem<SyslogParsed> item) {
                //SyslogParsed sp = item.getModelObject();
                item.add(new Label("col1"));
                item.add(new Label("col2" ));
                item.add(new Label("col3") );
                item.add(new Label("col4" ));

            }


        };    


    final PropertyModel<List<SyslogParsed>> sysLogPropertyModel =  new     PropertyModel<List<SyslogParsed>>(this, "Dao.findAll");


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

    logTableListView.setReuseItems(true);


    sysLogSearchForm.add(new AjaxSubmitLink("submit"){
        private static final long serialVersionUID = 1L;


        @SuppressWarnings("unchecked")
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            List<?> allLog =  syslogParsedDao.findAll();

            logTableListView.setList(allLog);               logTableListView.modelChanged();


            target.add(wmc);
        }


    });

===============

 <table class="sortable" wicket:id="listContainer">
               <tr>
                 <th> col 1</th>
                 <th> col2</th>
                 <th>col 3 </th>
                 <th> col 4</th>
               </tr>
               <tr wicket:id="List">
                 <td  wicket:id="col1" > </td>
                 <td wicket:id="col2"> </td> 
                 <td wicket:id="col3"> </td> 
                 <td wicket:id="col4"> </td>
                </tr>
            </table>
    </wicket:extend>

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

сначала проверьте, что в вашем ListView назначена модель (я думаю, что да, потому что отображается 18 строк ..), затем в вашем populateItem используйте PropertyModel, например,

protected void populateItem(ListItem<SyslogParsed> item) {
  SyslogParsed sp = item.getModelObject();
  item.add(new Label("col1",new PropertyModel<SyslogParsed>(sp, "blabla1")));
  item.add(new Label("col2",new PropertyModel<SyslogParsed>(sp, "blabla2") ));
  item.add(new Label("col3",new PropertyModel<SyslogParsed>(sp, "blabla3")) );
  item.add(new Label("col4",new PropertyModel<SyslogParsed>(sp, "blabla4") ));
}

также вы можете использовать CompoundPropertyModel

1 голос
/ 30 марта 2012

Я не вижу, где вы на самом деле устанавливаете модель списков. попробуйте сначала создать экземпляр модели свойств, а затем создать представление списка, например

new ListView<SyslogParsed>("List", sysLogPropertyModel )

Затем свойство модели будет звонить

this.getDAO().getFindAll() в этом случае. Поэтому похоже, что ваши данные никогда не будут найдены, более того, у списка нет никакого объекта modelobject и он не будет уведомлять о любых изменениях.

Вы можете попробовать использовать AbstractReadonlyModel, например

new ListView<SyslogParsed>("List", new AbstractReadOnlyModel<SyslogParsed>() {
          public SyslogParsed getObject() {
                  getSyslogparsedao().findAll();
          }
});

и добавление контейнера listviews в ajaxrequesttarget в вашем методе отправки. Каждый раз, когда вы переопределяете представление, будет вызываться модель getObject, и список получит обновленные данные.

0 голосов
/ 02 апреля 2012

У меня недостаточно репо, чтобы проголосовать за ваш ответ - оба ответа фактически решают мою проблему == Вот что я сделал -

сначала добавлена ​​фиктивная модель

     AbstractReadOnlyModel<List<LogParsed>> emptyListModel = new AbstractReadOnlyModel<List<LogParsed>>(){ 
        @Override public List<logParsed> getObject() { 
     List<logParsed> emptyList = new ArrayList<LogParsed>(); 
        LogParsed sp = new LogParsed(); 

        emptyList.add(sp); return emptyList; 
} };
=====


    final  AbstractReadOnlyModel<List<LogParsed>> listModel =  new  AbstractReadOnlyModel<List<v>>()
        {

            @Override
            public List<LogParsed> getObject() {
                // TODO Auto-generated method stub
                return LogParsed.findAll();
            }
        };   


      final ListView<logParsed> logTableListView = new ListView<logParsed>("logList",emptyListModel ){

            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(ListItem<logParsed> item) {
                logParsed sp = item.getModelObject();

                item.add(new Label("sdo somthing"," "+ sp.getdosomthing() ));

            }


        };    

        //wmc.setVisible(false); 
        wmc.setOutputMarkupId(true);
        wmc.add(logTableListView);
        add(wmc);

        logTableListView.setList(new ArrayList<logParsed>());
        //logTableListView.setReuseItems(true);

        AjaxSubmitLink aj =  new AjaxSubmitLink("submit"){

            private static final long serialVersionUID = 1L;

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

                logTableListView.setDefaultModel(listModel );
                logTableListView.modelChanged();
                target.add(wmc);
            }

            @Override
            protected void onError(AjaxRequestTarget arg0, Form<?> arg1) {
                // TODO Auto-generated method stub

            }
    };
        logSearchForm.add(aj);

    return logSearchForm;

}
====

Хитрость заключается в том, что при создании представления списка вы должны определить, как будет создаваться повторяющийся элемент. поэтому, когда вы изменяете свою модель в ajaxsubmit - повторяющийся элемент может следовать предыдущему шаблону.

Надеюсь, кто-нибудь найдет этот ответ полезным

...