Wicket 7 - Select、Select选项和预设
Wicket 7 - Select, SelectOptions and pre-set
我使用 Select 而不是 DropDownChoice 来使用 OPTGROUP。
Select<Role> roleInput = new Select<Role>("role", new PropertyModel<Role>(this,"selectedRole"));
两个角色列表是:
SelectOptions<Role> fedOptions = new SelectOptions<Role>("federazione",federationRoleList,new RoleRenderer());
SelectOptions<Role> eOptions = new SelectOptions<Role>("enti",eRoleList,new RoleRenderer());
它在提交和在 roleInput 上应用 AjaxFormComponentUpdatingBehavior 时运行良好,我动态修改了我的 PropertyModel。
不幸的是我的预设有问题。
我尝试将 selectedRole 设置为特定角色,但 Select 始终从第一个列表的第一个元素开始。
DropDownChoice 可以完美地预先设置模型,但不能 Select。
我试过
roleInput.setModelObject(selectedRole);
但它不起作用。
我认为问题在于必须管理两个或更多中继器而不是单个列表的组件。
有线索吗?
谢谢
编辑:
RoleRenderer 的实现
public class RoleRenderer implements IChoiceRenderer<Role>,Serializable{
private static final long serialVersionUID = 1L;
@Override
public Object getDisplayValue(Role object) {
return object.getName();
}
@Override
public String getIdValue(Role object, int index) {
return object.getId().toString();
}
@Override
public Role getObject(String id, IModel<? extends List<? extends Role>> choices) {
return getObjectFromId(id);
}
public Role getObjectFromId(String id){
return null;
};
}
注意:getObjectFromId 需要访问管理器,因此将在外部被覆盖。
在 org.apache.wicket.extensions.markup.html.form.select.SelectOption#onComponentTag() 处放置一个断点,然后查看 select.isSelected(this)
为与默认模型(对象)匹配的 SelectionOption 返回的内容。
可能是您的 #equals()
实施不正确。
我使用 Select 而不是 DropDownChoice 来使用 OPTGROUP。
Select<Role> roleInput = new Select<Role>("role", new PropertyModel<Role>(this,"selectedRole"));
两个角色列表是:
SelectOptions<Role> fedOptions = new SelectOptions<Role>("federazione",federationRoleList,new RoleRenderer());
SelectOptions<Role> eOptions = new SelectOptions<Role>("enti",eRoleList,new RoleRenderer());
它在提交和在 roleInput 上应用 AjaxFormComponentUpdatingBehavior 时运行良好,我动态修改了我的 PropertyModel。
不幸的是我的预设有问题。 我尝试将 selectedRole 设置为特定角色,但 Select 始终从第一个列表的第一个元素开始。
DropDownChoice 可以完美地预先设置模型,但不能 Select。
我试过
roleInput.setModelObject(selectedRole);
但它不起作用。
我认为问题在于必须管理两个或更多中继器而不是单个列表的组件。
有线索吗?
谢谢
编辑: RoleRenderer 的实现
public class RoleRenderer implements IChoiceRenderer<Role>,Serializable{
private static final long serialVersionUID = 1L;
@Override
public Object getDisplayValue(Role object) {
return object.getName();
}
@Override
public String getIdValue(Role object, int index) {
return object.getId().toString();
}
@Override
public Role getObject(String id, IModel<? extends List<? extends Role>> choices) {
return getObjectFromId(id);
}
public Role getObjectFromId(String id){
return null;
};
}
注意:getObjectFromId 需要访问管理器,因此将在外部被覆盖。
在 org.apache.wicket.extensions.markup.html.form.select.SelectOption#onComponentTag() 处放置一个断点,然后查看 select.isSelected(this)
为与默认模型(对象)匹配的 SelectionOption 返回的内容。
可能是您的 #equals()
实施不正确。