Sie können dieselbe Klassenhierarchie im UI duplizieren.
public class TaskFormPanel<T extends Task> extends Panel {
public TaskFormPanel(String id, IModel<T> model)
super(id, new CompoundPropertyModel(model));
add(new TextField("d"));
add(new TextField("e));
add(new Button("submit) {
(...)
}
}
}
public class Task1FormPanel extends TaskFormPanel<Task1> {
public TaskFormPanel(String id, IModel<Task1> model)
super(id, model);
add(new TextField("a"));
add(new TextField("b));
add(new TextField("c"));
}
}
public class Task2FormPanel extends TaskFormPanel<Task2> {
public TaskFormPanel(String id, IModel<Task1> model)
super(id, model);
add(new TextField("x"));
add(new TextField("y));
add(new TextField("z"));
}
}
Und die HTML-Dateien:
TaskFormPanel:
<wicket:panel>
<wicket:child/>
<label>d</label> <input wicket:id="d">
<label>e</label> <input wicket:id="e">
<input type="submit" wicket:id="submit"/>
</wicket:panel>
Task1Panel.html:
<wicket:extend>
<label>a</label> <input wicket:id="a">
<label>b</label> <input wicket:id="b">
<label>c</label> <input wicket:id="c">
</wicket:extend>
Task2Panel.html:
<wicket:extend>
<label>x</label> <input wicket:id="x">
<label>y</label> <input wicket:id="y">
<label>z</label> <input wicket:id="z">
</wicket:extend>
Hinweis: Stellen Sie sicher, dass Sie ein ladbares deletachemodel verwenden, um die Aufgabenobjekte zu umbrechen, wenn sie einen Verweis auf einen Thread enthalten, andernfalls werden Serialisierungsprobleme auftreten. Eine Singleton-Registry, die Ihre Aufgaben speichert und sie durch einen zufälligen Schlüssel zurückgeben kann, ist genug.
Ich bin mir nicht ganz sicher, ob ich das Problem verstehe. Wenn Sie Ihre Aufgabenobjekte jedoch in das Modell einfügen, können sie keine Threads referenzieren, da Modellobjekte serialisierbar sein müssen. – biziclop