我需要在4列中显示selectManyCheckbox列表,但是问题在于此组件会生成一个表,因此我对如何定义这些列一无所知。

我正在使用PF 3.4,无法升级到PF4.x。你们对此有什么解决方案吗?

已编辑

现在我的代码中有这个

<h:form id="formAdminAccesosXPerfil">

    <h:panelGrid title="Accesos" columns="5">

    <c:forEach items="#{accesosXPerfilMB.listadoAcceso}" var="availableItem" varStatus="loop">

             <h:panelGroup>
                <p:selectBooleanCheckbox id="box_#{loop.index}" value="#{accesosXPerfilMB.checkBoxItems[availableItem]}" />
                <h:outputLabel for="box_#{loop.index}" value="#{availableItem.nombre}" />
            </h:panelGroup>
    </c:forEach>

    </h:panelGrid>


@ViewScoped的Managebean

我更改了建议的方法,因为它对我不起作用...

从:

public void save() {
List<E> selectedItems = checkboxItems.entrySet().stream()
    .filter(e -> e.getValue() == Boolean.TRUE)
    .map(e -> e.getKey())
    .collect(Collectors.toList());
// ...


}

对此:

public void guardarAccesos(){
    try {
        System.out.println("Size: "+getCheckBoxItems().entrySet().size());

        for(BpAcceso acceso:getCheckBoxItems().keySet()){
            System.out.println("Acceso Seleccionado: "+acceso.getNombre());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}


但是我在hashMap上没有得到任何选定的项目。只是为了确保我正在使用jdk1.6

最佳答案

selectBooleanCheckbox<c:forEach>循环中生成一堆<h:panelGrid columns="X">组件,并将模型从List<E>更改为Map<E, Boolean>

所以,代替

private List<E> selectedItems;
private List<E> availableItems;




<p:selectManyCheckbox value="#{bean.selectedItems}">
    <f:selectItems value="#{bean.availableItems}" />
</p:selectBooleanCheckbox>




private Map<E, Boolean> checkboxItems;
private List<E> availableItems;

@PostConstruct
public void init() {
    checkboxItems = new HashMap<>();
}




<h:panelGrid columns="4">
    <c:forEach items="#{bean.availableItems}" var="availableItem" varStatus="loop">
        <h:panelGroup>
            <p:selectBooleanCheckbox id="box_#{loop.index}" value="#{bean.checkboxItems[availableItem]}" />
            <h:outputLabel for="box_#{loop.index}" value="#{availableItem}" />
        </h:panelGroup>
    </c:forEach>
</h:panelGrid>




public void save() {
    List<E> selectedItems = checkboxItems.entrySet().stream()
        .filter(e -> e.getValue() == Boolean.TRUE)
        .map(e -> e.getKey())
        .collect(Collectors.toList());
    // ...
}


请注意,<ui:repeat>不适用于此处JSTL in JSF2 Facelets... makes sense?所述的原因

10-07 17:18