Erdel
Erdel

Reputation: 380

LoadableDetachableModel is not refreshed onSubmit and the model is removed from the page

I am trying to query table and re-render the LoadableDetachableModel with result list. Table is empty upon page initialization. After onSubmit method call the table is removed from the page and model is gone. All I got is below JS error. I can see that the property is not rendered yet but do not know why.

Uncaught TypeError: Cannot read properties of null (reading 'nextSibling')
    at Object.Wicket.replaceOuterHtmlSafari (wicket-ajax.js:214)
    at Object.Wicket.replaceOuterHtml (wicket-ajax.js:222)
    at wicket-ajax.js:931
    at Object.<anonymous> (wicket-ajax.js:91)

Here is the relevant code:

final WebMarkupContainer listViewContainerForLogTable = new WebMarkupContainer("listViewContainerForLogTable");
        listViewContainerForLogTable.setOutputMarkupId(true);


final LoadableDetachableModel<List<BufferLogs>> bufferLogList = new LoadableDetachableModel<List<BufferLogs>>() {
            @Override
            protected List<BufferLogs> load() {
                return bufferLogsService.getAllLogs();
            };

        };


final PageableListView<BufferLogs> listViewForLogTable = new PageableListView<BufferLogs>("listViewForLogTable", bufferLogList,10) {

            @Override
            protected void populateItem(ListItem<BufferLogs> item) {

                final BufferLogs mobject = item.getModelObject();

                SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy");
                String date = formatter.format(mobject.getcDate());

                formatter = new SimpleDateFormat("HH:mm:ss");
                String time = formatter.format(mobject.getcDate());

                item.add(new Label("id", String.valueOf(mobject.getRowNum()) ));
                item.add(new Label("lineName", mobject.getLineName()));
                item.add(new Label("date", date));
                item.add(new Label("time", time));
                item.add(new Label("short", String.valueOf(mobject.getShortBuffer())));
                item.add(new Label("full", String.valueOf(mobject.getFullBuffer())));
                item.add(new Label("bufferOffset", String.valueOf(mobject.getBufferOffset() == null ? "" : mobject.getBufferOffset() ) ));

            }

        };

        listViewContainerForLogTable.add(listViewForLogTable);


AjaxButton submit = new AjaxButton("submit") {
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                target.addComponent(listViewContainerForLogTable);
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                target.addComponent(feedbackPanel);

            }

        };

listViewContainerForLogTable.add(navigator);
        add(listViewContainerForLogTable);

Upvotes: 0

Views: 99

Answers (1)

svenmeier
svenmeier

Reputation: 5681

That JS code is 10 year old from pre- Wicket 1.6. You should upgrade to Wicket 9 (or Wicket 8 at minimum).

Upvotes: 1

Related Questions