1

新しいグループを追加した後、パネルを更新する必要があります (以下のコードではパネルとして宣言されています)。ItemSelectionComponentコンポーネントはPanel、特定の人物の追加されたグループを含む別のものです。私がする必要があるのは、特定のパネル ( ItemSelectionComponentwicket id を持つパネル"panel") を更新し、新しく追加されたグループを表示する必要がある新しいグループを追加することです。

現在
target.addComponent(panel);
、リフレッシュに使用していますが、機能していないようです:(

誰かが何が悪いのか教えてもらえますか?
ありがとう!

4

3 に答える 3

1

avaiableGroups は、GroupSelectionModels のリストを含む LoadableDetachableModel である必要があります。AjaxSubmitLink を使用する場合は、LoadableDetachableModel から List を取得して追加します。

LoadableDetachableModel<List<GroupSelectionModel>> LDM = new LoadableDetachableModel<List<GroupSelectionModel>>() {

     private static final long serialVersionUID = 1L;

     @Override
     protected String load() {                          
           return ServiceLocator.getInstance().find(GroupService.class).getAllGroups();;
     }
};


AjaxSubmitLink addBtn = new AjaxSubmitLink("addBtn") {

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> f) {

            List<Group> currentGroups = ServiceLocator.getInstance().find(GroupService.class).getAllGroups();
            Group group = new Group();
            group.setGroupType(Group.GroupType.EMAIL);
            group.setMerchant(merchant);
            group.setGroupName(form.getModelObject().getGroupName());


            ServiceLocator.getInstance().find(GroupService.class).saveGroup(group);
            GroupSelectionModel newGroup = new GroupSelectionModel();
            newGroup.setGroup(group);
            newGroup.setGroupSelected(true);
            LDM.getObject().add(newGroup);
    target.addComponent(panel);
        }
    };

次に、LDM をパラメータとして、avaiableGroups の代わりに ItemSelectionComponent に渡します。avaiableGroups のように、ItemSelectionComponent で LDM を使用します。

 public class ItemSelectionComponent extends Panel{
private static final long serialVersionUID = 6670144847L;
private LoadableDetachableModel<List<GroupSelectionModel>> model;

public ItemSelectionComponent(String id,LoadableDetachableModel<List<GroupSelectionModel>> model){
    super(id);
    this.model = model;
    init();

}

private void init(){
    WebMarkupContainer groupSelectionContainer = new WebMarkupContainer("groupSelectionContainer");
    RepeatingView repeater = new RepeatingView("groupList");
    WebMarkupContainer groupList;

    for(final GroupSelectionModel m : model.getObject()){
        groupList = new WebMarkupContainer(repeater.newChildId());
        WebMarkupContainer groupNameContainer = new WebMarkupContainer("groupNameContainer");
        groupNameContainer.add(new Label("groupName", m.getGroup().getGroupName()));
        groupList.add(groupNameContainer);
        repeater.add(groupList);                  
    }
    groupSelectionContainer.add(repeater);
    this.add(groupSelectionContainer);
}
}

お役に立てれば。

于 2013-01-08T17:46:58.503 に答える
0

パネルをターゲットにすると、その中のコンポーネントが更新されます。ただし、何が起こるかは、「ItemSelectionComponent」が「avaiableGroups」をどのように使用しているかによって異なります。

于 2013-01-08T12:27:23.037 に答える
0

あなたの問題に対する解決策が 1 つあります。WebMarkupContainerを追加します。

final WebMarkupContainer panelContainer = new WebMarkupContainer("panelContainer");
panelContainer.setOutputMarkupId(true);

そして、html では次のようになります。

<div wicket:id="panelContainer"></div>

次に、パネルをマークアップ コンテナーに追加する必要があります。

panelContainer.add(panel)

そして、パネルの代わりにターゲットにマークアップ コンテナーを追加します。

target.addComponent(panelContainer);

これでうまくいかない場合はお知らせください。さらにサポートいたします

于 2013-01-08T11:44:18.140 に答える