我有一个wicket页面,其中包含一个表单,用于编辑与另一个实体有很多关系的实体。
@Entity...
class Period {
...
@Column(length = 100)
private String description;
@ManyToMany()
private List<Action> actions = new ArrayList<Action>;
...
}
@Entity...
class Action {
...
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "join", joinColumns = @JoinColumn(name = "actionId"),
inverseJoinColumns = @JoinColumn(name = "periodId"))
private Set<Period> periods = new HashSet<Period>();
...
}
class FormPage {
public FormPage(Period period) {
CompoundPropertyModel<Period> props = new CompoundPropertyModel<Period>(period);
Form<Period> form = new Form<Period>("id", props);
form.add(new TextField<String>("description"));
???
}
}
如何在“期间”添加“操作”?旧的jsp页面显示了带有标签和复选框的表单中所有可用的Action对象。我想保留复选框,以便页面的外观不会从旧的jsp页面改变。我唯一能想到的是创建一个哈希表,其中包含可用操作的id和一个布尔值,指示是否应该添加或删除它。有没有人知道更好的方式或实施的好例子?
答案 0 :(得分:0)
使用CheckGroup,ListView和Check组件的层次结构。请参阅Wicket的FormInput示例以获取灵感。
答案 1 :(得分:0)
找到合适的组件使用。斯文迈尔模糊地朝着正确的方向推了我,但这应该在问号上完成:
List<Action> available = dao.getAllActions();
form.add(new CheckBoxMultipleChoice<Action>(actions, available));
为了正确渲染字符串,我在CheckBoxMultipleChoice中添加了一个ChoiceRender:
new ChoiceRenderer<Action>() {
@Override
public Object getDisplayValue(Action object) {
return object.getDisplayName(); //return any string describing the object
}
}