【问题标题】:How do I implement back button support on a form in Wicket?如何在 Wicket 中的表单上实现后退按钮支持?
【发布时间】:2011-04-07 17:36:53
【问题描述】:

我有一个带有选项卡式面板的搜索页面,每个选项卡中都有一个表单(请参见下面的代码),提交时会在数据库中搜索命中。但是,此表单上的后退按钮支持不起作用(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);
    }
}

页面类:

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

【问题讨论】:

    标签: forms wicket back-button


    【解决方案1】:

    我还没有机会尝试您的代码,但是使用 ajax 会不会有问题。检票口中的 ajax 尚不完全支持后退按钮:https://issues.apache.org/jira/browse/WICKET-271。与第一次查看相比,您可能希望在按返回按钮时检查正在查看的页面的版本。

    【讨论】:

    • 谢谢你!实际上,问题出在 IndicatingAjaxButton 中。我将其替换为 html 中的常规提交按钮,并在表单中添加了覆盖方法 onSubmit 和 onError,以调节结果面板何时可见。它现在可以工作了。
    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2012-04-23
    相关资源
    最近更新 更多