【发布时间】:2011-04-24 03:14:28
【问题描述】:
好的,这是我使用 Wicket 1.5M2 的控制器:
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());
}
}
}
当我一次只使用一个浏览器窗口进行 CRUD 操作时,它可以工作。如果我使用两个窗口,用户列表不会更新,除非我在地址字段中再次输入基地址以重新加载页面。
澄清:在同一台计算机上同时使用不同的浏览器效果很好。仅当在同一浏览器中使用多个窗口时,它才不起作用。
幕后发生了什么?
我为整个页面设置了setVersioned(false),为什么我的地址栏显示的地址是:http://localhost:8080/wicket/bookmarkable/package.name.Users?2 那个数字2不是页面的版本吗?
最重要的是,我需要做些什么才能使其表现得像桌面 GUI 应用一样,因此一个浏览器窗口 == 一个应用实例。
【问题讨论】: