Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将IModel的两个布尔字段映射到Wicket中的RadioChoice_Java_Wicket - Fatal编程技术网

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

Java 将IModel的两个布尔字段映射到Wicket中的RadioChoice,java,wicket,Java,Wicket,我有一个带有两个布尔字段的用户对象: //User Bean public class Users { private Boolean showContactData; private Boolean showContactDataToContacts; // Getters + Setters } 我想在使用ApacheWicket的UI中将其显示为RadioChoice HTML部分的代码段: <input type="radio" wicket:id="communit

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

//User Bean
public class Users {
  private Boolean showContactData;
  private Boolean showContactDataToContacts;
  // Getters + Setters
}
我想在使用ApacheWicket的UI中将其显示为RadioChoice

HTML部分的代码段:

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

Wicket中带有radio的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 );
  }
}
公共类UserForm扩展表单{
公共用户窗体(字符串id,用户){
super(id,新的CompoundPropertyModel(用户));
RadioChoice rChoice=新RadioChoice(“社区设置”、选项、渲染器);
添加(rChoice);
}
}
我现在的问题是,我当然没有用户对象中的属性community_设置。 我只想将这两个布尔值映射到UI中的一个单选项

我怎么能在Wicket做到这一点

谢谢!
Sebastian

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

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);
RadioChoice rChoice=new RadioChoice(“社区设置”,new IModel(){
公共长getObject(){
if(user.getShowContactData()&&user.getShowContactDataToContacts()){
返回1L;
}
// ...
}
公共void setObject(长选项){
如果(选项==1){
user.setShowContactData(true);
user.setShowContactDataToContacts(true);
}else if(选项==2){
// ...
}
}
公共图书馆{
}
},选择);

顺便说一句,我个人会使用
Enum
,所以根本没有特殊的映射。看起来你做的事情有点太“低级”,所以wicket模型的东西会感觉很麻烦。如果合适,尝试使用对象而不是基本类型。

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

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);
RadioChoice rChoice=new RadioChoice(“社区设置”,new IModel(){
公共长getObject(){
if(user.getShowContactData()&&user.getShowContactDataToContacts()){
返回1L;
}
// ...
}
公共void setObject(长选项){
如果(选项==1){
user.setShowContactData(true);
user.setShowContactDataToContacts(true);
}else if(选项==2){
// ...
}
}
公共图书馆{
}
},选择);

顺便说一句,我个人会使用
Enum
,所以根本没有特殊的映射。看起来你做的事情有点太“低级”,所以wicket模型的东西会感觉很麻烦。如果合适,尝试使用对象而不是基本类型。

它是Wicket 6.0.0 Beta3(与最终版本类似)
RadioChoice
extends
SingleSeleChoice
意味着它只能设置单个字段。例如,您可以有一个选项列表,并希望选择其中一个。看见如果要更新多个字段,则可以重写
Form.onSubmit()
,并在那里进行处理。也许有更好的解决办法。问题不在于多选与否。问题是这些布尔值中只有一个可以同时为真。您自然可以通过使用一个收音机盒来解决这个问题。它是Wicket 6.0.0 Beta3(类似于最终版本)
RadioChoice
extends
SingleSeleChoice
意味着它只能设置单个字段。例如,您可以有一个选项列表,并希望选择其中一个。看见如果要更新多个字段,则可以重写
Form.onSubmit()
,并在那里进行处理。也许有更好的解决办法。问题不在于多选与否。问题是这些布尔值中只有一个可以同时为真。你自然会用一个收音机来解决这个问题。谢谢克里斯托夫。我能够根据你的建议解决我的问题。我们不能如此轻易地修改模型,因为模型在某种程度上是稳定的,并且不是我们当前重构的一部分。如果您对我们的工作感兴趣,可以参加我们的“Apache OpenMeetings”。我们目前使用Wicket将Flash重构为HTML。谢谢Christoph。我能够根据你的建议解决我的问题。我们不能如此轻易地修改模型,因为模型在某种程度上是稳定的,并且不是我们当前重构的一部分。如果您对我们的工作感兴趣,可以参加我们的“Apache OpenMeetings”。目前,我们使用Wicket将Flash重构为HTML。