Ok, voici mon contrôleur à l'aide Wicket 1.5M2:Wicket: ListView pas mis à jour lorsque vous utilisez plusieurs fenêtres de navigateur pour CRUD simples
public class Users extends WebPage {
private static final List<User> users = Collections.synchronizedList(new ArrayList<User>());
public Users() {
final UserForm userForm = new UserForm("userForm");
add(userForm);
add(new ListView<User>("users", users) {
@Override
protected void populateItem(ListItem<User> item) {
final User user = item.getModelObject();
item.add(new Label("name", user.getName()));
item.add(DateLabel.forDatePattern("dateOfBirth", new Model(user.getDateOfBirth()), "dd.MM.yyyy"));
item.add(new Label("email", user.getEmail()));
item.add(new Link("editLink") {
@Override
public void onClick() {
userForm.setModelObject(user);
}
});
item.add(new Link("removeLink") {
@Override
public void onClick() {
users.remove(user);
}
});
}
});
setVersioned(false);
}
private class UserForm extends Form<User> {
public UserForm(String id) {
super(id, new CompoundPropertyModel<User>(new User()));
add(new TextField<String>("name"));
add(DateTextField.forDatePattern("dateOfBirth", "dd.MM.yyyy"));
add(new TextField<String>("email"));
}
@Override
protected void onSubmit() {
User user = getModelObject();
users.remove(user);
users.add(user);
setModelObject(new User());
}
}
}
Il fonctionne quand j'utilise une seule fenêtre du navigateur à la fois pour les opérations CRUD. Si j'utilise deux fenêtres, la liste des utilisateurs ne se met pas à jour, à moins que j'insère à nouveau l'adresse de base dans le champ d'adresse pour recharger la page. CLARIFICATION: L'utilisation simultanée de différents navigateurs dans le même ordinateur fonctionne bien. Ce n'est que lorsque vous utilisez plusieurs fenêtres dans le même navigateur que cela ne fonctionne pas.
Que se passe-t-il dans les coulisses?
Je mis setVersioned (false) pour la page entière, pourquoi est-ce que ma barre d'adresse affiche les adresses comme: http://localhost:8080/wicket/bookmarkable/package.name.Users?2 est-ce pas le numéro 2 de la version de la page? Le plus important est que dois-je faire pour que cela se comporte comme une application GUI de bureau, donc une fenêtre de navigateur == une instance de l'application.