Mon tableau de bord nécessite au moins deux clics pour mettre à jour l'un des composants CheckBoxMulitpleChoice à l'aide de la méthode onSubmit de mes boutons. Comment puis-je mettre ces composants à jour lors du premier clic? J'utilise deux composants CheckBoxMultipleChoice pour compiler une liste d'utilisateurs à notifier. Le premier est rempli en fonction des utilisateurs disponibles dans une sélection d'équipe DropDownChoice. L'utilisateur peut alors sélectionner des utilisateurs de cette équipe à ajouter au second CheckBoxMultipleChoice, qui affiche tous les utilisateurs à notifier et permet à l'utilisateur de supprimer des utilisateurs.Wicket CheckBoxMultipleChoice ne se met pas à jour
J'ai essayé d'utiliser le composant de palette, mais je suis à l'aide 1.3.1 wicket (que j'ai des problèmes de migration à 1,4, mais qui est pour un autre poste) et n'ont pas réussi à contrôler l'interface utilisateur. J'ai également essayé de placer les composants dans des formes, mais cela n'a pas changé la fonctionnalité. Il faut au moins 2 clics pour ajouter ou supprimer une entrée de la case à cocher. il semble que getValue() ne soit pas mis à jour tant que le comportement du bouton n'a pas été modifié.
// Team selection for notification =================================
final DropDownChoice teamNotificationChoice = new DropDownChoice("teamNotification", teamList, new IChoiceRenderer() {
public Object getDisplayValue(Object o) {
return ((Team) o).getName();
}
public String getIdValue(Object o, int i) {
return Long.toString(((Team) o).getId());
}
});
notifySelectionList.add(teamNotificationChoice);
// teamUser selection list for notification ========================
List<ItemUser> choices = UserUtils.convertToItemUserListFromUsers(getJtrac().findUsersForSpace(space.getId()));
teamUsers = new CheckBoxMultipleChoice("teamUsers", choices, new IChoiceRenderer() {
public Object getDisplayValue(Object o) {
return ((ItemUser) o).getUser().getName();
}
public String getIdValue(Object o, int i) {
return ((ItemUser) o).getUser().getLoginName();
}
});
notifySelectionList.add(teamUsers);
// Add selected teamUsers button ===================================
Button button = new Button("addUsersToList") {
@Override
public void onSubmit(){
}
};
button.add(new AjaxFormComponentUpdatingBehavior("onClick") {
protected void onUpdate(AjaxRequestTarget target) {
List choices = teamUsers.getChoices();
String value = teamUsers.getValue();
for (int index = 0; index < choices.size(); index++) {
final ItemUser choice = (ItemUser) choices.get(index);
if(isSelected(choice, index, value)&!userSelection.contains(choice)) {
userSelection.add(choice);
}
}
SortUtils.sortItemUsers(userSelection);
itemUsers.setChoices(userSelection);
target.addComponent(itemUsers);
}
});
notifySelectionList.add(button);
notifySelectionList.setOutputMarkupId(true);
// notify list ===================================================
itemUsers = new CheckBoxMultipleChoice("itemUsers", userSelection, new IChoiceRenderer() {
public Object getDisplayValue(Object o) {
return ((ItemUser) o).getUser().getName();
}
public String getIdValue(Object o, int i) {
return ((ItemUser) o).getUser().getLoginName();
}
});
itemUsers.setMaxRows(10);
itemUsers.setOutputMarkupId(true);
notifyList.setOutputMarkupId(true);
notifyList.add(itemUsers);
// Remove selected teamUsers button ===================================
Button removeButton = new Button("removeUsersFromList") {
@Override
public void onSubmit(){
}
};
removeButton.add(new AjaxFormComponentUpdatingBehavior("onClick") {
protected void onUpdate(AjaxRequestTarget target) {
List choices = itemUsers.getChoices();
String value = itemUsers.getValue();
for (int index = 0; index < choices.size(); index++) {
final ItemUser choice = (ItemUser) choices.get(index);
if(isSelected(choice, index, value)) {
userSelection.remove(choice);
}
}
itemUsers.setChoices(userSelection);
target.addComponent(itemUsers);
}
});
notifyList.add(removeButton);
Nous vous remercions à l'avance pour les conseils que vous pourriez être en mesure d'offrir ...
Mettez à niveau vers quelque chose de plus récent. 1.3.1 est une version très ancienne. –
@ martin-g as-tu lu mon message? Le problème n'est pas lié à la version. Il a fini par être ma surutilisation de AjaxFormComponentUpdatingBehavior(). – OnesAndZeros