为什么容器和片段的单独标记标识符?

时间:2014-11-13 13:03:38

标签: wicket

我可以在容器中添加多个片段吗?显然不是,但为什么我需要一个单独的容器标记标识符和一个片段?

在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);

}

2 个答案:

答案 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在哪里附加片段,第二个告诉它在哪里附加哪个片段。