我是Wicket的新手,所以我不确定这是否是一个愚蠢的问题,无论如何,我无法通过Google搜索找到答案并搜索stackoverflow。
我正在尝试创建一个由arraylist内容生成的链接的html列表。此列表的大小可能不同,因此我无法创建静态链接,它们必须由循环生成。该列表在我的HomePage.html上,我希望所有这些链接引用到OtherPage.html,但具有不同的参数。该链接应与我正在通过的参数“name”具有相同的名称。 我的'尝试'如下:(我在这里使用通用名称来保持简单)
RepeatingView list = new RepeatingView("list");
for (final String s : names) {
Link l = new Link("link") {
@Override
public void onClick() {
PageParameters pageParameters = new PageParameters();
pageParameters.add("name", s);
setResponsePage(OtherPage.class, pageParameters);
}
};
l.setBody(Model.of(s));
list.add(new Label(list.newChildId(), l));
}
add(list);
这是我认为需要的html部分:
<ul>
<li wicket:id="list"></li>
</ul>
我使用ListView进行了另一次尝试但没有成功
List<String> namesList = Arrays.asList();
for (String s : names) {
namesList.add(s);
}
add(new ListView<String>("names", namesList) {
@Override
protected void populateItem(final ListItem<String> item) {
Link l = new Link("name") {
@Override
public void onClick() {
PageParameters pageParameters = new PageParameters();
pageParameters.add("name", item.getModel());
setResponsePage(PatternPage.class, pageParameters);
}
};
l.setBody(Model.of(item.getModel()));
item.add(l);
}
});
使用以下html:
<div id="bd" style="display: table;">
<div wicket:id="names" style="display: table-row;">
<div style="display: table-cell;"></div>
<div wicket:id="name" style="display: table-cell;"></div> </div>
</div>
导致了这个错误:
Last cause: null
WicketMessage: Can't instantiate page using constructor 'public paf.assignment3.HomePage(org.apache.wicket.request.mapper.parameter.PageParameters)' and argument ''. An exception has been thrown during construction!
答案 0 :(得分:2)
我得到了它的工作。我不得不将链接添加到列表中并省略标签。 这是java代码。首先,我使用循环添加所有链接。
RepeatingView list = new RepeatingView("list");
for (final String s : names) {
list.add(createLink(list.newChildId(), s));
}
add(list);
我创建了一个单独的方法来创建链接本身,以保持一个干净的代码。这是方法createLink:
public Link createLink(String linkName, final String name) {
Link l = new Link(linkName) {
@Override
public void onClick() {
PageParameters pageParameters = new PageParameters();
pageParameters.add("name", name);
setResponsePage(PatternPage.class, pageParameters);
}
};
l.setBody(Model.of(name));
return l;
}
html保持这样:
<ul>
<li wicket:id="list"></li>
</ul>
答案 1 :(得分:0)
如果你正在使用setResponsePage(OtherPage.class, pageParameters)
,那么你的页面类必须有一个带有PagaParameter参数的构造函数。
或者只使用setResponsePage(new OtherPage(name))
。