Primefaces selectManyCheckbox预选/默认选择

时间:2015-05-06 11:25:59

标签: jsf primefaces selectmanycheckbox

我正在使用selectmanycheckbox编辑数据库中的表条目(在本例中为用户)创建如下:

userid | system
1        4
2        4
2        5
2        6
3        4
...  
像这样。它工作得很好。问题是,即使所选用户在系统列表中只有少数可用选项,selectmanycheckbox中的所有系统都都是高亮显示的。

详细说明:

用户x在数据库中有x个系统 在应用程序中我设置了x系统 我在列表中调用该用户选择系统的位置,它突出显示所有用户的系统,而不仅仅是该用户的系统,因此看起来用户列出了所有系统。

用户实体:

@ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "users_system_groups", joinColumns = {
            @JoinColumn(name = "user_id", referencedColumnName = "id") }, inverseJoinColumns = {
            @JoinColumn(name = "system_group_id", referencedColumnName = "id") })
    private List<SystemGroup> systemGroups = new ArrayList<>();
html:

<p:selectManyCheckbox layout="pageDirection" value="#{userEditBoundary.user.systemGroups}"
                                              converter="#{systemGroupConverter}">
                            <f:selectItems value="#{systemBoundary.systemGroups}" var="group" itemLabel="#{group.name}"
                                           itemValue="#{group}"/>
                            <p:ajax listener="#{userEditBoundary.save}"/>
                        </p:selectManyCheckbox>

系统边界

    public List<SystemGroup> getSystemGroups() {
        LinkedList<SystemGroup> result = new LinkedList<>();
        for (SystemGroup systemGroup : systemGroupStore.findAll()) {
            if (user.getSubject().isPermitted(LhtPermission.forSystemGroupReadAccess(systemGroup)))
                result.add(systemGroup);
        }
        return result;
    }

SystemGroup Converter

@Inject
    SystemGroupStore systemGroupStore;

    @Override public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String string) {
        SystemGroup systemGroup = systemGroupStore.findOne(Long.parseLong(string));
        return systemGroup;
    }

    @Override public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object object) {
        if (!(object instanceof SystemGroup))
            throw new IllegalArgumentException(
                    "Object has to be from type SystemGroup, " + object.getClass().getName() + " given!");
        SystemGroup systemGroup = (SystemGroup) object;
        return String.valueOf(systemGroup.getId());
    }

我没有进一步的想法来解决这个问题,我不知道为什么要检查所有选项。

0 个答案:

没有答案