带有所有可用值列表的 Wicket 表单

Wicket form with list of all available values

假设我们有以下实体(表示 m:n 关系,在连接 table 上有附加列):

public class User {
    private String name;
    private List<Login> logins;
}

public class Login {
   private User user;
   private Website website;
   private String login;
}

public class Website {
   private String name;
   private List<Login> logins;
}

我想创建一个 User 编辑表单,其中包含每个现有网站的一个登录输入字段(以便所有现有网站都在表单中)。例如,定义了 2 个网站(网站 1、网站 2),我希望看到:

我的问题是在提交表单时实现以下行为:如果填写了网站的登录输入字段,则应将其添加到用户 1 的登录名中,如果为空,则不应 added/get已删除。

我使用 User 模型(用于用户名)创建表单,网站字段使用 ListView 由所有登录模型(直接从数据库中获取)支持。这使我的表单看起来符合预期,但行为不存在,因为网站模型独立于 User 模型。您推荐的方法是什么?

使用由所有可能的 Login 对象列表支持的 ListView,即现有 Login 对象(如果存在)和 dummy/empty/new Login每个 Website 不存在的对象。

然后在提交表单时保存那些 Login 具有非 null 和非空登录字段的对象。

您可以创建一个 bean 而不是直接使用 Login 对象,但它的工作方式相同。

如果您还想删除用户删除了登录值的 Login 对象,请创建一些方法来检查 Login 对象之前是否已保存(即它的 login 字段曾经不为空),如果现在为空则删除该对象。

ListView 更改为 PropertyListView 就成功了。模型得到正确更新,因此我可以在 onSubmit() 中进行任何需要的后处理。使用 ListView,表单呈现良好,但登录输入字段的更改被忽略。