1

添加新组后,我需要刷新面板(它已在下面的代码中声明为面板)。该ItemSelectionComponent组件是一个不同的组件Panel,其中包含特定人员的添加组。我需要做的是,一旦我添加了一个新组,应该刷新特定面板(ItemSelectionComponent具有 wicket id的面板"panel")并且应该显示新添加的组。

我目前
target.addComponent(panel);
用来刷新,但它似乎没有工作:(

有人可以告诉我有什么问题吗?
谢谢!

4

3 回答 3

1

您的avaiableGroups 应该是包含您的GroupSelectionModel 列表的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 作为参数传递给 ItemSelectionComponent 而不是avaiableGroups。在 ItemSelectionComponent 中使用 LDM,就像使用avaiableGroups 一样。

 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

对于您的问题,我有一种可能的解决方案。添加一个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 回答
0

当您以面板为目标时,其中的组件将被刷新。但是会发生什么取决于“ItemSelectionComponent”如何使用“avaiableGroups”。

于 2013-01-08T12:27:23.037 回答