2015-10-27 2 views
3

Мне нужно показать список selectManyCheckbox в 4 столбцах, но проблема в том, что этот компонент генерирует таблицу, поэтому я не знаю, как определить столбцы.Определить столбцы для selectManyCheckbox

Я работаю с PF 3.4, я не могу перейти на PF 4.x. У вас, ребята, есть решение?

EDITED

Теперь у меня есть это в моем коде

<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> 

Managebean который @ViewScoped

Я изменил предложенный метод, потому что он не работает для меня ...

от:

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

ответ

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?

+0

Позвольте мне попробовать, я дам вам знать! thanks @BalusC – DuSant

+0

Я могу показать список из 4 столбцов, но я не могу получить выбранные значения в методе сохранения, я использую jdk1.6. По умолчанию список checkboxItems не заполняется выбранными. Я вычисляю размер, и я получил «0» – DuSant

+0

Он работает для меня в проекте с блокнотной записью. Чтобы избежать очевидного, вы поместили его в '', и ваша логика загрузки данных учитывает обратную связь? (т. е. «доступные элементы» - это область видимости). – BalusC