我可以在容器中添加多个片段吗?显然不是,但为什么我需要一个单独的容器标记标识符和一个片段?
在HTML中,
<div wicket:id="container"></div>
<div wicket:id="container2"></div>
<wicket:fragment wicket:id="myfragment">
<h3 wicket:id="dexter"></h3>
<h3 wicket:id="deedee"></h3>
</wicket:fragment>
<wicket:fragment wicket:id="myotherfragment">
<h3 wicket:id="foo"></h3>
<h3 wicket:id="bar"></h3>
</wicket:fragment>
网页
public class MyPage extends WebPage {
private Component container;
public MyPage() {
container=new MyFragment("container",this);
add(container);
container=new MyOtherFragment("container2",this);
add(container);
其中一个fragents(另一个是相似的),
public MyFragment(String id,WebPage page) {
super(id,"myfragment",page);
Label label=new Label("dexter", "Omelette du fromage");
add(label);
Label label2=new Label("deedee","That's all you can say!");
add(label2);
}
答案 0 :(得分:2)
片段用于轻松重用小组件,填充动态表单或类似组件。 使用片段时,您应该使用ListView来填充它们。这样您就可以轻松构建动态标记。您需要引用要使用的片段,并告诉wicket将其放在标记中的位置。
使用列表
代替两个容器div<div wicket:id="fragmentList">
<div wicket:id="fragment"></div>
</div>
在两个具有相同标记的片段(两个H3标签)中没有意义。相反,你可以有一个标题片段和一个标签片段或任何你需要的东西。
<wicket:fragment wicket:id="headerFragment">
<h3 wicket:id="dexter"></h3>
<h3 wicket:id="deedee"></h3>
</wicket:fragment>
<wicket:fragment wicket:id="labelFragment">
<label wicket:id="foo"></label>
<label wicket:id="bar"></label>
</wicket:fragment>
<wicket:fragment wicket:id="inputFragment">
<label wicket:id="foo"></label>
<input wicket:id="bar" type="text">
</wicket:fragment>
在您的WebPage中,您可以将片段列表所需的片段添加到ListView
public HomePage(final PageParameters parameters)
{
List<Fragment> fragments = Arrays.asList(new HeaderFragment("fragment", this),
new LabelFragment("fragment", this),
new InputFragment("fragment", this));
add(new ListView<Fragment>("fragmentList", fragments) {
@Override
protected void populateItem(ListItem<Fragment> item)
{
final Fragment frag = _item.getModelObject();
_item.add((Fragment) frag);
}
});
}
答案 1 :(得分:1)
这里没有集装箱这样的东西。有片段,它有自己的id并且与主标记树分开,并且有一个地方可以将片段附加到。这个地方将拥有自己的ID,就像任何其他Wicket组件一样。
因此Fragment
构造函数中的第一个id告诉Wicket在哪里附加片段,第二个告诉它在哪里附加哪个片段。