Question

J'ai un AjaxPagingNavigator. En fait sur une certaine condition, la liste dont les pages AjaxPagingNavigator est rechargés. Lorsque cela arrive, je veux seulement rendre le navigateur lorsque la liste contient plus de 1 page.

Alors que quelqu'un sait où je peux joindre un gestionnaire afin que je puisse vérifier une condition de visibilité dans mon AjaxPagingNavigator et activer / désactiver la visibilité de sorte que lorsque le navigateur est mis à jour par l'intermédiaire. ajax est soit visible ou non?

Markup:

<div wicket:id="mainWrap">
    <div wicket:id="navigator"/>
    <div wicket:id="listWrap">
        <div wicket:id="list><!-- here be content --></div>
    </div>
</div>

J'ai donc un événement ajax qui rafraichit « mainWrap » qui rafraîchit le « navigateur » ainsi que la « liste » et enveloppements.

est l'événement qui déclenche la chose.

 protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
     List foo = null; // do work to get list
     model.setFound(found); // update the model (thus updating "list")
     target.addComponent(mainWrap);
}

Edit: Je sais que je peux écrire

navigator.setVisibility(list.getPageCount() > 1);

après la création du navigateur et après la mise à jour du modèle, mais j'espérais résumer que dans une sous-classe de AjaxPagingNavigator.

Était-ce utile?

La solution

Soyez prudent avec les calculs coûteux faire dans une méthode isVisible surchargée, comme Wicket appellera isVisible plusieurs fois par demande-sans compter les appels que vous pourriez faire par inadvertance.

En général, la meilleure façon d'aller à ce sujet est de passer outre onConfigure et définir l'indicateur de visibilité manuellement.

@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}

onConfigure est appelée une seule fois au cours du traitement de la demande, et a appelé à tous les composants, y compris ceux qui sont invisibles (alors que onBeforeRender est seulement appelé pour les composants visibles).

Autres conseils

Il a été un moment que je l'ai touché Wicket, mais si ma mémoire est bonne:

Pouvez-vous pas remplacer la méthode isVisible () de votre objet « navigateur », de sorte qu'il affiche uniquement sous la condition que vous désirez?

par exemple. quelque chose comme

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top