2011-04-07 2 views
2

각 탭 (아래 코드 참조) 내에 양식이있는 탭 패널이있는 검색 페이지가 있으며, 제출하면 해당 데이터베이스에서 히트를 검색합니다. 그러나이 양식의 뒤로 버튼 지원이 작동하지 않습니다 (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)); 
} 
} 

답변

1

나는 밖으로 코드를 시도 할 기회가 없었어요,하지만 아약스의 사용에 문제가있을 수 있습니다. 뒤로 버튼은 아직 wicket에서 ajax로 완전히 지원되지 않습니다 : https://issues.apache.org/jira/browse/WICKET-271. 처음 보는 것과 비교할 때 뒤로 버튼을 누를 때보고있는 페이지의 버전을 확인하고자 할 수 있습니다.

+0

감사합니다. 실제로 IndicatingAjaxButton에 문제가있었습니다. 이것을 HTML의 일반 제출 버튼으로 바꾸고 결과 패널이 표시 될 때 규제하기 위해 양식에 제출 및 onError에 대한 대체 메소드를 추가했습니다. 이제 작동합니다. – Simmer