MarkupContainer#add(Behavior... behaviors)
ラッピング コンポーネントのメソッドをオーバーライドできます。これはもちろん、ラッピング コンポーネントが動作を受け取ることができないことを意味します。
public class MyWrappingComponent extends Panel {
private TextField<?> field;
// Constructors and stuff..
@Override
public Component add(Behavior... behaviors) {
field.add(behaviors);
return this;
}
}
1 つのオプションは、ラッピング コンポーネントを に分離することですBorder
。これは、コンポーネントをコンテンツで囲むために使用できます。ただし、これにより、ラッピング要素の「透明度」が低下します。( Javadoc ページの例を参照してください)。
public class MyWrappingBorder extends Border {
public MyWrappingBorder(String id) {
// add the <img />
// add the <div />
}
...
}
// The markup
<wicket:border>
<div>
<img />
<wicket:body /> <!-- Will be replaced with the added content -->
</div>
</wicket:border>
次に、次のように使用します。
add(new MyWrappingBorder("border")
.add(new TextField<String>("input").add(/* the behaviors */)));
このようなマークアップで
<div wicket:id="border">
<input type="text" wicket:id="input" />
</div>
このBorder
アプローチにより、「TextField? 成分。たとえば、ドロップダウンを追加する場合:
add(new MyWrappingBorder("border")
.add(new DropDownChoice<String>("input", listOfChoices)));