J’essaie de construire une table avec des liens d’actions où le titre du lien et la logique changent en fonction de certaines valeurs.
Balisage:
Logique Java:
// get list from repo List list = (List) getUserList(); // render list view add(new ListView("cListview", list) { private static final long serialVersionUID = 1747919695791673759L; @SuppressWarnings({ "rawtypes", "unchecked" }) protected void populateItem(ListItem item) { final User user = (User) item.getModelObject(); item.add(new Label("name", user.getName())); item.add(new Label("description", user.getName())); item.add(new Label("status", user.getIsEnabled())); // Check user status Ssortingng controlLabel = ""; Ssortingng status = "new"; // TODO create enumerated status field in User pojo or even // better a hasmap switch (status) { case "new": controlLabel = "ACTIVATE"; case "running": controlLabel = "PAUSE"; case "paused": controlLabel = "RESUME"; default: break; } // activate/pause/resume link item.add(new Link("control", item.getModel()) { private static final long serialVersionUID = -5420108740617806989L; @Override public void onClick() { User user = (User) getModelObject(); System.out.println(user.getName() + " : activated. "); } }).add(new Label("label", Model.of(controlLabel)));
J’ai utilisé ces liens pour obtenir de l’aide:
Comment changer le texte du lien dans Wicket? Comment créer une liste récurrente de liens dans une balise li en utilisant le guichet apache?
Il ne semble pas y avoir de correspondance puisque mon titre de lien de variante vit dans une ligne de tableau.
Je reçois cette exception:
Failed to handle: . It might be that no resolver has been registered to handle this special tag. But it also could be that you declared wicket:id=label in your markup, but that you either did not add the component to your page at all, or that the hierarchy does not match. Container: [Link [Component id = control]] MarkupStream: [markup = bundle://306.49:1/com/cortex/web/pages/CampaignsPage.html , index = 1, current = '' (line 0, column 0)] at org.apache.wicket.markup.MarkupStream.throwMarkupException(MarkupStream.java:526) at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1411) at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1557) at org.apache.wicket.MarkupContainer.renderComponentTagBod [EDIT] When using span tags: I get: Last cause: Unable to find component with id 'label' in [Link [Component id = control]] Expected: 'campaignsListview:0:control:label'. Found with similar names: 'cListview:0:label',...
Vous ajoutez l’étiquette à votre article et non à votre lien comme ceci:
item.add(new Link("control"){...}).add(new Label("label"));
Cela semble un peu flou à cause de tous les crochets. Vous pouvez extraire le lien et l’append séparément pour rendre votre code plus clair:
... Link link = new Link("control") { ... }; Label label = new Label("label"); link.add(label); item.add(link) ...