0

我使用 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 需要对 Manager 的访问权限,因此将在外部被覆盖。

4

1 回答 1

1

在 org.apache.wicket.extensions.markup.html.form.select.SelectOption#onComponentTag() 处放置一个断点,然后查看select.isSelected(this)与默认模型(对象)匹配的 SelectionOption 所返回的内容。可能是您的#equals()实现不正确。

于 2016-04-26T20:07:35.343 回答