隐藏 Wicket WebMarkupContainer 将不起作用
Hiding Wicket WebMarkupContainer won't work
嘿,我有一个嵌套在 ListView 中的 ListView,我想在单击 AjaxLink 时更改内部 ListView 的可见性。
我看了很多关于它的帖子,并从中得到了一些建议。
例如。 : .setMarkupId(true), 添加一个WebMarkupContainer, ...
但没有任何帮助。无论如何,这就是我到目前为止所得到的。
public class EditZustaendigkeit extends WebPage {
private static final long serialVersionUID = 1L;
private List<Institut> institute = new ArrayList<Institut>();
private Form<Void> mainForm = new Form<Void>("mainForm");
public EditZustaendigkeit() {
this.add(mainForm);
createInstitute();
mainForm.add(new ListView<Institut>("listView", getInstitute()) {
private static final long serialVersionUID = 1L;
protected void populateItem(final ListItem<Institut> item) {
final int index = item.getIndex();
AjaxLink<String> myLink;
IModel<String> labelModel = Model.of("+");
final Institut institut = (Institut) institute.get(index);
item.add(new Label("institutLabel", new PropertyModel<Institut>(institut, "langName")));
final WebMarkupContainer div = new WebMarkupContainer("cont");
div.setOutputMarkupId(true);
div.setOutputMarkupPlaceholderTag(true);
div.add(new ListItemZustaendigkeit("zustaendigkeiten", item, institut));
item.add(div);
item.add(myLink = new AjaxLink<String>("extenderInstitut") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
collapseItem(index, item, div);
target.add(mainForm);
item.add(div);
setResponsePage(getPage());
}
});
myLink.setBody(labelModel);
myLink.setOutputMarkupId(true);
item.add(new CheckBox("institutCheck", Model.of(Boolean.FALSE)) {
private static final long serialVersionUID = 1L;
// todo
});
}
});
}
public void expandAllItem(ListView<Institut> listView) {
}
public void collapseAllItem(ListView<Institut> listView) {
}
public void expandItem(int index, ListItem<Institut> item, WebMarkupContainer div) {
div.setVisible(true);
}
public void collapseItem(int index, ListItem<Institut> item, WebMarkupContainer div) {
div.setVisible(false);
}
ListItemZustaendigkeit 扩展自 Panel。它有相应的 .html 文件。
现在我想专注于 public void collapseItem()
,因为我想如果一个问题可以解决,其他所有问题也应该是可能的。
问题似乎出在您 "extenderInstitut" 的 onClick
中。您正在调用 setResponsePage
,这将导致您的中继器再次初始化。此外,您希望在 mainForm
上设置 setOutputMarkupId(true)
。
item.add(myLink = new AjaxLink<String>("extenderInstitut") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
collapseItem(index, item, div);
target.add(mainForm);
}
});
嘿,我有一个嵌套在 ListView 中的 ListView,我想在单击 AjaxLink 时更改内部 ListView 的可见性。
我看了很多关于它的帖子,并从中得到了一些建议。 例如。 : .setMarkupId(true), 添加一个WebMarkupContainer, ...
但没有任何帮助。无论如何,这就是我到目前为止所得到的。
public class EditZustaendigkeit extends WebPage {
private static final long serialVersionUID = 1L;
private List<Institut> institute = new ArrayList<Institut>();
private Form<Void> mainForm = new Form<Void>("mainForm");
public EditZustaendigkeit() {
this.add(mainForm);
createInstitute();
mainForm.add(new ListView<Institut>("listView", getInstitute()) {
private static final long serialVersionUID = 1L;
protected void populateItem(final ListItem<Institut> item) {
final int index = item.getIndex();
AjaxLink<String> myLink;
IModel<String> labelModel = Model.of("+");
final Institut institut = (Institut) institute.get(index);
item.add(new Label("institutLabel", new PropertyModel<Institut>(institut, "langName")));
final WebMarkupContainer div = new WebMarkupContainer("cont");
div.setOutputMarkupId(true);
div.setOutputMarkupPlaceholderTag(true);
div.add(new ListItemZustaendigkeit("zustaendigkeiten", item, institut));
item.add(div);
item.add(myLink = new AjaxLink<String>("extenderInstitut") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
collapseItem(index, item, div);
target.add(mainForm);
item.add(div);
setResponsePage(getPage());
}
});
myLink.setBody(labelModel);
myLink.setOutputMarkupId(true);
item.add(new CheckBox("institutCheck", Model.of(Boolean.FALSE)) {
private static final long serialVersionUID = 1L;
// todo
});
}
});
}
public void expandAllItem(ListView<Institut> listView) {
}
public void collapseAllItem(ListView<Institut> listView) {
}
public void expandItem(int index, ListItem<Institut> item, WebMarkupContainer div) {
div.setVisible(true);
}
public void collapseItem(int index, ListItem<Institut> item, WebMarkupContainer div) {
div.setVisible(false);
}
ListItemZustaendigkeit 扩展自 Panel。它有相应的 .html 文件。
现在我想专注于 public void collapseItem()
,因为我想如果一个问题可以解决,其他所有问题也应该是可能的。
问题似乎出在您 "extenderInstitut" 的 onClick
中。您正在调用 setResponsePage
,这将导致您的中继器再次初始化。此外,您希望在 mainForm
上设置 setOutputMarkupId(true)
。
item.add(myLink = new AjaxLink<String>("extenderInstitut") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
collapseItem(index, item, div);
target.add(mainForm);
}
});