将IModel的两个布尔字段映射到Wicket中的RadioChoice

时间:2012-09-09 15:52:58

标签: java wicket

我有一个带有两个布尔字段的User对象:

//User Bean
public class Users {
  private Boolean showContactData;
  private Boolean showContactDataToContacts;
  // Getters + Setters
}

我想使用Apache Wicket在UI中显示它作为RadioChoice。

HTML部分的片段:

<input type="radio" wicket:id="community_settings"/>

在Wicket中使用无线电的Java表格

public class UserForm extends Form<Users> {
  public UserForm(String id, Users user) { 
    super(id, new CompoundPropertyModel<Users>(user));
    RadioChoice rChoice = new RadioChoice<Long>("community_settings", choices, renderer);
    add(rChoice );
  }
}

我的问题是,我当然在Users对象中没有属性community_settings。 我只是想将这两个布尔值映射到UI中的无线电选择。

我怎么能在Wicket做到这一点?

谢谢! 塞巴斯蒂安

1 个答案:

答案 0 :(得分:3)

您需要一个模型来映射数据:

RadioChoice<Long> rChoice = new RadioChoice<Long>("community_settings", new IModel<Long>() {
    public Long getObject() {
        if (user.getShowContactData() && user.getShowContactDataToContacts()) {
            return 1L;
        }
        // ...
    }

    public void setObject(Long choice) {
        if (choice == 1) {
            user.setShowContactData(true);
            user.setShowContactDataToContacts(true);
        } else if (choice == 2) {
            // ...
        }
    }

    public void detach() {
    }
}, choices);
顺便说一句,我个人会使用Enum,所以根本就没有特殊的映射。看起来你做的事情有点过于“低级”,因此wicket模型的东西会觉得非常麻烦。如果合适,尝试使用对象而不是原始类型。