1

休止状態を使用してアイテムを追加する更新ビューを設定しましたが、送信を押した後に更新できません。更新ビューは次のとおりです。

   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 に新しいエントリが表示されるため、データが休止状態に追加されていますが、プログラムの実行中には更新されません。

4

1 に答える 1

2

Wicket のモデルの概念を理解する必要があります。getDefaultModel() は、何らかのコンポーネント (ページ、パネルなど) にバインドされたモデルを提供しています。あなたはデータを提供する責任があります。

あなたの場合、データをラップしてLoadableDetachableModel<UserDetails>、モデル インスタンスを に提供しRefreshingView<UserDetails>ます。

ajax を使用してフォームを送信する場合は、 to を追加しListViewPanelますAjaxRequestTarget(これは、再描画が必要なコンポーネントをマークします)。

于 2013-11-06T14:38:20.820 に答える