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