2011-04-07 2 views
2

J'ai une page de recherche avec un panneau à onglets, avec un formulaire dans chaque onglet (voir le code ci-dessous), qui, une fois soumis, recherche des résultats dans la base de données. Cependant, le support du bouton arrière de ce formulaire ne fonctionne pas (le texte fourni par l'utilisateur dans textField est perdu). Comment puis-je implémenter le support du bouton arrière pour ce formulaire? J'ai joué avec l'émission de setVersioned (true) sur la page, panel, form et textField en combinaison avec modelChanging() et modelChanged() sur le textField et le formulaire, mais aucun d'entre eux n'a fonctionné. J'ai également essayé la méthode redéfinie newLink de TabbedPanel comme détaillé here, mais cela n'a pas fonctionné non plus. Je suis à perte ...Comment puis-je implémenter le support des boutons de retour sur un formulaire dans Wicket?

Toute aide serait grandement appréciée.

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 Classe:

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

Répondre

1

Je n'ai pas eu la chance d'essayer votre code, mais pourrait-il être un problème avec l'utilisation de ajax. Le bouton de retour n'est pas encore entièrement pris en charge avec ajax dans le portillon: https://issues.apache.org/jira/browse/WICKET-271. Vous souhaiterez peut-être vérifier les versions des pages que vous consultez en appuyant sur le bouton de retour lorsque vous les comparez à la première fois.

+0

Merci Tnem! En effet, le problème était dans le IndatingAjaxButton. J'ai remplacé ceci avec un bouton de soumission régulier en html, et ajouté des méthodes de substitution onSubmit et onError au formulaire, pour réguler quand le panneau de résultats est visible. Cela fonctionne maintenant. – Simmer

Questions connexes