Dans une petite solution que je vais peut-être utiliser votre méthode (peut-être avec Map<dataClass,guiClass>
mais pas trop important). Si des chemins différents nécessitent un balisage différent, utilisez des fragments de guichet.
<html xmlns:wicket="http://wicket.sourceforge.net/">
<wicket:panel>
<table>
<tr wicket:id="lista">
<td><span wicket:id="label"></span></td>
<td><span wicket:id="dynamicValue"></span></td>
</tr>
</table>
<wicket:fragment wicket:id="memoValue">
<textarea wicket:id="value" cols="100" rows="15"></textarea>
</wicket:fragment>
<wicket:fragment wicket:id="smallValue">
<input wicket:id="value"></input>
</wicket:fragment>
<wicket:fragment wicket:id="comboValue">
<select wicket:id="value"></select>
</wicket:fragment>
</wicket:panel>
</html>
et
@Override
protected void populateItem(ListItem<IFieldDescription> item) {
final IFieldDescription poz = item.getModelObject();
System.out.println("Start:" + poz.getLabel());
item.add(new Label("label", poz.getLabel()));
if (poz instanceof IVirtualField) {
Fragment fragS = new Fragment("dynamicValue", "smallValue", ValuesPanel.this);
TextField<String> tf;
fragS.add(tf = new TextField<String>("value", new Model<String>("pole wirtualne")));
tf.setEnabled(false);
item.add(fragS);
return;
}
if (poz instanceof IRelationFieldDescription) {
IRelationFieldDescription rel = (IRelationFieldDescription)poz;
Fragment fragS = new Fragment("dynamicValue", "comboValue", ValuesPanel.this);
SingleFieldModel<Integer> model = new SingleFieldModel<Integer>(detachableRVModel, poz);
RelationDropDownChoice tf;
tf = new RelationDropDownChoice("value", model,new DetachableRTypeModel(rel.getSlave()));
fragS.add(tf);
//tf.setEnabled(false);
item.add(fragS);
return;
}
if (poz instanceof MemoField) {
Fragment fragM = new Fragment("dynamicValue", "memoValue", ValuesPanel.this);
SingleFieldModel<String> model = new SingleFieldModel<String>(detachableRVModel, poz);
fragM.add(new TextArea<String>("value", model));
// IModel<Integer> imo = new
// Model<Integer>(poz.getLength());
// tf.add(new AttributeAppender("maxlength", imo, " "));
// IModel<Integer> siz = new Model<Integer>(50);
// tf.add(new AttributeAppender("size", imo, " "));
item.add(fragM);
System.out.println("Memo:" + poz.getLabel());
return;
}
{
Fragment fragS = new Fragment("dynamicValue", "smallValue", ValuesPanel.this);
SingleFieldModel<String> model = new SingleFieldModel<String>(detachableRVModel, poz);
TextField<String> tf;
fragS.add(tf = new TextField<String>("value", model));
IModel<Integer> imo = new Model<Integer>(poz.getLength());
tf.add(new AttributeAppender("maxlength", imo, " "));
IModel<Integer> siz = new Model<Integer>(50);
tf.add(new AttributeAppender("size", siz, " "));
System.out.println("Single:" + poz.getLabel());
item.add(fragS);
}
}