使用wicket中的循环创建链接列表

时间:2015-01-10 15:44:11

标签: java html list loops wicket

我是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!

2 个答案:

答案 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))