2014-11-13 4 views
0

Могу ли я добавить несколько фрагментов в контейнер? По-видимому, нет, но зачем мне нужен отдельный идентификатор разметки для контейнера, а другой - для фрагмента?Зачем нужен отдельный идентификатор разметки для контейнера и для фрагмента?

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

} 

ответ

1

Там нет такого понятия, как контейнер здесь. Есть фрагмент, который имеет свой собственный идентификатор и стоит отдельно от основного дерева разметки, и есть место, где вы можете прикрепить свой фрагмент. Это место будет иметь свой собственный идентификатор, как и любой другой компонент Wicket.

Таким образом, первый идентификатор в конструкторе Fragment сообщает Wicket, где нужно прикрепить фрагмент, а второй - его фрагменту для прикрепления.

2

Фрагменты предназначены для легкого повторного использования небольших компонентов, для заполнения динамической формы или аналогичной. При использовании фрагмента вы должны использовать ListView для их заполнения. Таким образом, вы можете легко создавать динамическую разметку. Вам нужно указать фрагмент, который вы хотите использовать, и сообщить калитки, где поместить его в разметку.

Вместо двух контейнеров дивы, использовать список

<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); 
    }   
    }); 
} 
Смежные вопросы