0

我正在使用 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;
    }

系统组转换器

@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());
    }

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

4

0 回答 0