以wicket形式处理多对多实体关系

时间:2014-03-11 16:18:04

标签: java wicket

我有一个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和一个布尔值,指示是否应该添加或删除它。有没有人知道更好的方式或实施的好例子?

2 个答案:

答案 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
    }
}