如何在Wicket中的表单上实现后退按钮支持?

时间:2011-04-07 17:36:53

标签: forms wicket back-button

我有一个带有选项卡式面板的搜索页面,每个选项卡中都有一个表单(请参阅下面的代码),提交时会在数据库中搜索命中。但是,此表单上的后退按钮支持不起作用(textField中的用户提供的文本丢失)。如何为此表单实现后退按钮支持?我一直在页面,面板,表单和textField上发布setVersioned(true)以及textField和表单上的modelChanging()和modelChanged(),但这些都没有奏效。我也尝试从TabbedPanel重写方法newLink作为详细的here,但这也没有用。我不知所措......

非常感谢任何帮助。

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);
    }
}

Page class:

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 个答案:

答案 0 :(得分:1)

我没有机会尝试你的代码,但是使用ajax可能会出现问题。尚未完全支持wicket中的ajax后退按钮:https://issues.apache.org/jira/browse/WICKET-271。与第一次查看时相比,您可能需要在按后退按钮时查看正在查看的页面版本。

相关问题