Wicket 使用Hibernate刷新视图

Wicket 使用Hibernate刷新视图,wicket,Wicket,我设置了一个刷新视图,该视图使用hibernate添加项目,但在我按submit后无法更新,以下是刷新视图: public class ListViewPanel extends Panel { /** * */ private static final long serialVersionUID = 1L; final List<IModel<UserDetails>> users = new ArrayList<IModel<UserDet

我设置了一个刷新视图,该视图使用hibernate添加项目,但在我按submit后无法更新,以下是刷新视图:

   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));
    }

}
然后在OnSubmit按钮中,我尝试调用一个新的模型对象

   usersView.getDefaultModelObject();

数据被添加到hibernate,因为每次我运行应用程序时,ListViewPanel都会显示新条目,但在程序运行时它们不会更新

您需要了解Wicket的模型概念。getDefaultModel()提供绑定到某个组件(页面、面板等)的模型。你有责任提供数据

在您的情况下,将数据包装在
LoadableDetachableModel
中,并向
RefreshingView
提供模型距离


如果您使用ajax提交表单,请将
ListViewPanel
添加到
AjaxRequestTarget
(这会标记需要重新绘制的组件)。

getDefaultModelObject为IModel提供对象,该对象与特定组件(面板,页面)耦合。在您的示例中,ListViewPanel没有耦合的IModel(您甚至将其设置为null),所以什么也不会发生它仍然不提供更新
   usersView.getDefaultModelObject();