각 탭 (아래 코드 참조) 내에 양식이있는 탭 패널이있는 검색 페이지가 있으며, 제출하면 해당 데이터베이스에서 히트를 검색합니다. 그러나이 양식의 뒤로 버튼 지원이 작동하지 않습니다 (textField의 사용자 제공 텍스트가 손실 됨). 이 양식에 대한 뒤로 버튼 지원은 어떻게 구현합니까? 나는 textField와 form에 대해 modelChanging()과 modelChanged()와 함께 page, panel, form 및 textField에서 setVersioned (true)를 발행하는 것으로 놀아왔다. 나는 또한 here 상세한 TabbedPanel에서 메서드 newLink를 재정의하려고했지만 그 중 하나도 작동하지 않습니다. 나는 손실에 ...Wicket의 양식에 대한 뒤로 버튼 지원은 어떻게 구현합니까?
어떤 도움을 주시면 대단히 감사하겠습니다.
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));
}
}
감사합니다. 실제로 IndicatingAjaxButton에 문제가있었습니다. 이것을 HTML의 일반 제출 버튼으로 바꾸고 결과 패널이 표시 될 때 규제하기 위해 양식에 제출 및 onError에 대한 대체 메소드를 추가했습니다. 이제 작동합니다. – Simmer