在添加新组后,我需要刷新面板(在下面的代码中已经声明为面板)。 ItemSelectionComponent
组件是不同的Panel
,其中包含特定人员的添加组。我需要做的是,一旦我添加了一个新组,应该刷新特定面板(带有wicket id ItemSelectionComponent
的{{1}}面板)并显示新添加的组。
我目前用的是
"panel"
刷新,但它似乎没有工作:(
有人能告诉我什么是错的吗?
谢谢!
答案 0 :(得分:1)
您的avaiableGroups应该是包含GroupSelectionModel列表的LoadableDetachableModel。当您从LoadableDetachableModel使用AjaxSubmitLink get 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。像使用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);
}
}
希望这有帮助。
答案 1 :(得分:0)
我有一个可能解决您问题的方法。 添加 WebMarkupContainer :
final WebMarkupContainer panelContainer = new WebMarkupContainer("panelContainer");
panelContainer.setOutputMarkupId(true);
在html中你会得到它:
<div wicket:id="panelContainer"></div>
然后您必须将面板添加到标记容器中:
panelContainer.add(panel)
在目标上添加标记容器而不是面板:
target.addComponent(panelContainer);
如果这不起作用,请告诉我,我会提供进一步的帮助
答案 2 :(得分:0)
当您定位面板时,其中的组件将被刷新。但是会发生什么取决于“ItemSelectionComponent”如何使用“avaiableGroups”。