2010-12-15 3 views
1

J'ai un problème avec PagingNavigator dans Wicket et je ne comprends pas pourquoi je l'ai. Voici la chose, je voulais utiliser un PagingNavigator avec un DataviewPourquoi le PagingNavigator ne génère-t-il pas les URL?

dataView = new DataView("pageableTicketsList", provider){ 
    protected void populateItem(final Item item) { 
     //Somes codes here 
    }; 
navigator = new PagingNavigator("navigator", dataView); 
dataView.setItemsPerPage(30); 
addOrReplace(dataView); 
addOrReplace(navigator); 

Dans le fichier html, je simplement:

<wicket:enclosure child="navigator">  
<div class="navigator"> 
     <span wicket:id="navigator" ></span> 
    </div>  
</wicket:enclosure> 

Quand je test dans un navigateur Web, en fait, je la pages nombre représenté par:

< < < 1 2 3 4 5 6 7 8 9 10> >>

MAIS aucun d'entre eux sont cliquables.

j'ai vu dans Firebug que les urls ne sont pas correctement générés comme ceci:

<a href="?wicket:interface=:13:mypage:navigator:navigation:0:pageLink:4:ILinkListener::"><span>1</span> 
</a> 

Au lieu de cela, je suis juste avoir

<span>1</span> 

Je ne comprends pas, ce que je fais faux ?

Voici le code de mon fournisseur

public class MyProvider implements IDataProvider { 

    private List<Ticket> ticketsList; 

    public MyProvider(TicketService ticketService // and some paramaters){ 
      ticketsList = ticketService.getListBy(//the parameters); 
    } 

    public Iterator iterator(int first, int count) { 
    return ticketsList.subList(first, first + count).iterator(); 
    } 

    public IModel model(final Object object) { 
      return new LoadableDetachableModel() { 
      @Override 
       protected Object load() { 
       return (Ticket)object; 
      }}; 
    } 

    public int size() { 
    return ticketsList.size(); 
    } 

    public void detach() { 

    } 

    public List<Ticket> getTicketsList() { 
    return ticketsList; 
    } 

    public void setTicketsList(List<ListTicketsExtranetView> ticketsList) { 
    this.ticketsList = ticketsList; 
    } 
} 

La méthode size() retourne la bonne valeur et navigator.isEnabled() renvoie true

Eh bien, après une journée entière de creuser, j'ai finalement trouvé où mon problème est venu de: J'ai un WebMarkupContainer qui a été ajouté à ma page, si j'enlève ce WebMarkupContainer, le PagingNavigator fonctionne très bien. Cependant, il n'y a pas de dépendances entre les deux, j'utilise le WebMarkupContainer pour afficher un message si une liste de Tickets est vide ou non. Alors POURQUOI l'influence WebMarkupContainer sur le PagingNavigator?

+0

Utilisez-vous Ajax? Si oui, avez-vous ajouté 'PagingNavigator' à la cible de la requête? – gnuf

+0

Non, je n'utilise pas Ajax – dagofly

+0

A propos de WebMarkupContainer: difficile à dire sans voir plus de code. Pouvez-vous en être fier plus? – bert

Répondre

0

Votre code semble correct. Avez-vous défini quelque chose sur désactivé avec

setEnabled (false);

Cela a un effet sur les composants inférieurs à ceux de la hiérarchie. Si cela ne fait pas de différence, essayez de poster du code supplémentaire.

+0

J'ai vérifié et j'ai trouvé 'navigator.setEnabled (false)' mais merci, de toute façon, j'ai ajouté 'navigator.setEnabled (true)' mais rien n'a changé T_T. – dagofly

1

Pouvez-vous publier le code de votre classe qui implémente IDataProvider, par ex. SortableDataProvider? Si la méthode size() ne renvoie pas la bonne valeur, vous pouvez rencontrer le comportement que vous voyez.

Questions connexes