0

我的问题是关于这个 primefaces 标签:

<p:selectManyCheckbox id="datasourceGroup" value="#{sessionBean.datasourceGroups}" converter="datasourceGroupConverter">
  <f:selectItems value="#{sesionBean.getAllDatasourceGroups()}" var="group" itemLabel="#{group.toString()}" itemValue="#{group}" />  
</p:selectManyCheckbox>                         

它根本不呈现任何可见的输出(复选框)。从日志输出中,我知道在页面刷新期间甚至没有调用一次“sessionBean.getAllDatasourceGroups()”方法。只有 'datasourceGroups' 属性的 'sessionBean.getDatasourcegroups()' getter 被调用一次。

我无法弄清楚问题是什么。我在同一页面上有非常相似的用例<p:selectManyMenu>,它们工作正常。<p:selectOneMenu>所以我对它的工作原理有一个基本的了解......或者我认为:-)

以下是代码的其他相关部分供参考:

会话豆:

@ManagedBean
@SessionScoped
public class SessionBean implements Serializable {

    private List<DatasourceGroup> datasourceGroups = new ArrayList<>();

    public List<DatasourceGroup> getDatasourceGroups() {
        return datasourceGroups;
    }

    public void setDatasourceGroups(List<DatasourceGroup> datasourceGroups) {
        this.datasourceGroups = datasourceGroups;
    }

    public List<DatasourceGroup> getAllDatasourceGroups() {
        List<DatasourceGroup> list = Arrays.asList(DatasourceGroup.values());
        return list;
    }
}

数据源组枚举:

public enum DatasourceGroup {

    KUNDEN (Permission.ZugriffKunden),
    INKASSO (Permission.ZugriffInkasso),
    INTERESSENTEN (Permission.ZugriffInteressenten),
    WARN (Permission.ZugriffWarnadressen);

    private Permission permissionNeeded;

    DatasourceGroup(Permission permission) {
        this.permissionNeeded=permission;
    }

    public Permission getPermissionNeeded() {
        return permissionNeeded;
    }

}

和 DatasourceGroupConverter:

@FacesConverter("datasourceGroupConverter")
public class DatasourceGroupConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String value) {

        if (Toolbox.isNullOrEmpty(value))
            return null;

        try {
            return DatasourceGroup.valueOf(value);
        } catch (IllegalArgumentException e) {
            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error:",
                    "'" + value + "' is not a valid datasource group name"));
        }
    }

    @Override
    public String getAsString(FacesContext fc, UIComponent uic, Object object) {
        if(object != null && object instanceof DatasourceGroup) {
            return ((DatasourceGroup)object).toString();
        }
        return null;
    }

}

顺便说一句,我正在使用 primefaces 6.0。

4

0 回答 0