我设置了一个刷新的视图,使用hibernate添加项目,但是在按下提交后我无法更新它,这里是令人耳目一新的视图:
public class ListViewPanel extends Panel {
/**
*
*/
private static final long serialVersionUID = 1L;
final List<IModel<UserDetails>> users = new ArrayList<IModel<UserDetails>>();
public ListViewPanel(String id, IModel<?> model) {
super(id, model);
Test test = new Test();
SessionFactory sessionFactory = test.configureSessionFactory();
Session session = sessionFactory.openSession();
listUsers(session, users);
add(new RefreshingView<UserDetails>("users") {
/**
*
*/
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
protected Iterator getItemModels() {
return users.iterator();
}
@Override
protected void populateItem(Item<UserDetails> item) {
UserDetails user = item.getModelObject();
item.add(new Label("userName", user.getUserName()));
item.add(new Label("userAddress", user.getAddress()));
}
});
}
public void listUsers(Session session, List<IModel<UserDetails>> users) {
Criteria criteria = session.createCriteria(UserDetails.class);
for (Object i : criteria.list()) {
users.add(Model.of((UserDetails) i));
}
}
然后我将列表视图面板添加到我的主页:
add(usersView = new ListViewPanel("users", null));
然后在我的OnSubmit按钮中,我尝试调用一个新的模型对象
usersView.getDefaultModelObject();
数据正被添加到休眠状态,因为每次运行应用程序时,ListViewPanel都会显示新条目,但在程序运行时不会更新它们。
答案 0 :(得分:2)
您需要了解Wicket的模型概念。 getDefaultModel()提供绑定到某个组件(页面,面板,...)的模型。您有责任提供数据。
在您的情况下,请将数据包装在LoadableDetachableModel<UserDetails>
中,并将模型保证金提供给RefreshingView<UserDetails>
。
如果您使用ajax提交表单,请将ListViewPanel
添加到AjaxRequestTarget
(这标记了需要重新绘制的组件)。