Как реализовать поддержку кнопки «Назад» в форме в Wicket? - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть страница поиска с панелью с вкладками, с формой внутри каждой вкладки (см. Код ниже), которая при отправке выполняет поиск в базе данных на предмет совпадений.Однако поддержка кнопки «Назад» в этой форме не работает (введенный пользователем текст в textField утерян).Как мне реализовать поддержку кнопки «Назад» для этой формы?Я поиграл с выдачей setVersioned (true) на странице, панели, форме и textField в сочетании с modelChanging () и modelChanged () для textField и формы, но ни один из них не сработал.Я также попытался переопределить метод newLink из TabbedPanel, как подробно здесь , но это тоже не сработало.Я в растерянности ...

Любая помощь будет принята с благодарностью.

public class TextSearchPanel extends Panel {
    CompoundsDataTablePanel hitsPanel;

    @SpringBean
    ICompoundDAO            compoundDAO;

    public TextSearchPanel(final String id, final FeedbackPanelWrapper feedbackPanel) {
        super(id);
        setOutputMarkupId(true);

        // Text Search Form
        Form<TextSearchPanel> textform = new Form<TextSearchPanel>("textForm");

        // Add textField
        TextField<String> textField = new TextField<String>("query", new Model<String>());
        textField.setRequired(true);
        textField.add(new StringValidator() {
            @Override
            protected void onValidate(final IValidatable<String> validatable) {
                String query = Name.replaceApostropheVariantsWithApostrophe(validatable.getValue());
                try {
                    // Ascertain parsing query does not throw an exception
                    compoundDAO.parseQuery(query);
                }
                catch (ParseException e) {
                    // Otherwise: Display the error back to the user
                    validatable.error(new ValidationError().setMessage(e.getMessage()));
                }
            }
        });
        textform.add(textField);

        // Add submit button
        textform.add(new IndicatingAjaxButton("ajaxsubmit") {
            @Override
            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
                target.addComponent(feedbackPanel);
                // Show hits panel
                hitsPanel.setVisible(true);
                target.addComponent(TextSearchPanel.this);
            }

            @Override
            protected void onError(final AjaxRequestTarget target, final Form<?> form) {
                target.addComponent(feedbackPanel);
                // Hide hits panel
                hitsPanel.setVisible(false);
                target.addComponent(TextSearchPanel.this);
            }
        });
        add(textform);

        // Text Hits Panel
        hitsPanel = new CompoundsDataTablePanel("hits", new TextHitsProvider(textField.getModel()));
        hitsPanel.setVisible(false);
        add(hitsPanel);
    }
}

Класс страницы:

public class SearchPage extends BasePage {
public SearchPage() {
    super("Search");
    setOutputMarkupId(true);

    List<ITab> tabs = new ArrayList<ITab>();
    tabs.add(new AbstractTab(new Model<String>("Spectrum search")) {
        @Override
        public Panel getPanel(final String panelId) {
            return new SpectrumSearchPanel(panelId, getFeedbackPanelWrapper());
        }
    });
    tabs.add(new AbstractTab(new Model<String>("Mass search")) {
        @Override
        public Panel getPanel(final String panelId) {
            return new MassSearchPanel(panelId, getFeedbackPanelWrapper());
        }
    });
    tabs.add(new AbstractTab(new Model<String>("Formula search")) {
        @Override
        public Panel getPanel(final String panelId) {
            return new FormulaSearchPanel(panelId, getFeedbackPanelWrapper());
        }
    });
    tabs.add(new AbstractTab(new Model<String>("Text search")) {
        @Override
        public Panel getPanel(final String panelId) {
            return new TextSearchPanel(panelId, getFeedbackPanelWrapper());
        }
    });

    // Add tabs to page to switch between search modes
    add(new TabbedPanel("tabs", tabs));
}
 }

1 Ответ

1 голос
/ 08 апреля 2011

У меня не было возможности опробовать ваш код, но это может быть проблемой с использованием ajax.Кнопка возврата еще не полностью поддерживается с помощью ajax в wicket: https://issues.apache.org/jira/browse/WICKET-271. Возможно, вы захотите проверить версии страниц, которые вы просматриваете при нажатии кнопки назад, по сравнению с просмотром в первый раз.

...