java—以wicket形式处理多个实体关系

umuewwlo  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(308)

我有一个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"));

        ???

    }
}

如何将“action”添加到“period”?旧的jsp页面以带有label和checkbox的形式显示了所有可用的操作对象。我想保留复选框,这样页面的外观就不会与旧的jsp页面发生变化。我唯一能想到的就是创建一个哈希表,其中包含可用操作的id,以及一个布尔值,指示是否应该添加或删除它。有人知道一个更好的方法或者一个实现的好例子吗?

zc0qhyus

zc0qhyus1#

找到要使用的正确组件。斯文迈尔含糊地把我推向正确的方向,但这应该在问号处完成:

List<Action> available = dao.getAllActions();
form.add(new CheckBoxMultipleChoice<Action>(actions, available));

为了正确呈现字符串,我在checkboxmultipleechoice中添加了一个choicerender:

new ChoiceRenderer<Action>() {
    @Override
    public Object getDisplayValue(Action object) {
        return object.getDisplayName(); //return any string describing the object
    }
}
llmtgqce

llmtgqce2#

使用checkgroup、listview和check组件的层次结构。请参阅wicket示例中的输入以获取灵感。

相关问题