JSF: отображать h: selectManyCheckBox по вертикали в h: dataTable - PullRequest
3 голосов
/ 28 июля 2010

У меня есть просто лицевая сторона, которая отображает список продуктов в табличном формате. В последнем столбце каждой строки есть флажок, используемый для маркировки продукта для удаления. До сих пор мне приходилось помещать selectBooleanCheckBox в каждую строку и иметь свойство «пометить для удаления» в сущности Product, но я думаю, что это ужасно, потому что у меня есть некоторые элементы представления в моем bean-компоненте модели.

Есть ли в любом случае h: selectManyCheckBox с распределением f: selectItem в каждой строке таблицы данных?

Спасибо

Ответы [ 4 ]

13 голосов
/ 28 июля 2010

Отличным предложением является t:selectManyCheckbox layout="spread".

В качестве альтернативы вы также можете просто связать компонент h:selectBooleanCheckbox со свойством Map<Long, Boolean>, где Long представляетID сущности (или любой другой идентификатор, который вы можете использовать для идентификации строки), и Boolean представляет проверенное состояние.

Например:

public class Bean {
    private List<Entity> entities;
    private Map<Long, Boolean> checked = new HashMap<Long, Boolean>();

    public void submit() {
        for (Entity entity : entities) {
            if (checked.get(entity.getId())) {
                // Entity is checked. Do your thing here.
            }
        }
    }

    // ...
}

с

<h:dataTable value="#{bean.entities}" var="entity">
    <h:column>
        <h:selectBooleanCheckbox value="#{bean.checked[entity.id]}" />
    </h:column>
    ...
</h:dataTable>
<h:commandButton value="submit" action="#{bean.submit}" />

Map<Long, Boolean> будет автоматически заполнен идентификатором всех объектов в качестве ключей карты, а значение флажка будет установлено в качестве значения карты, связанного с идентификатором объекта в качестве ключа.

См. Также:

3 голосов
/ 28 июля 2010

Вы можете, используя MyFaces Tomahawk's <t:selectManyCheckbox> с layout="spread"

1 голос
/ 08 ноября 2017

В моем приложении я использовал приведенный ниже набор кода, чтобы получить список из нескольких флажков для вертикального отображения с полосой прокрутки:

<style type="text/css">
#productCategoryId label {
  float: inherit;
  font-size: 10px!important;
  font-weight: normal;
}
#productCategoryId table.formTable th, table.formTable td {
  padding: 0px 0px 0 0;
}
</style>

<div style="width:200px;height: 280px;overflow-y:scroll;overflow-x:hidden;border:1px solid #999;" max-height=280px>
             <h:selectManyCheckbox  id="productCategoryId" layout="pageDirection" style="width:200px" styleClass="changeId">
                  <f:selectItem itemValue="-1000" itemLabel="ALL" />
                  <f:selectItems value="#{lookup.list['RSM_LOOKUP']['PRODUCT_CATEGORY']}"/>
                </h:selectManyCheckbox >
            </div>
0 голосов
/ 22 сентября 2011

Лучший способ использовать selectManyCheckbox и dataTable это ...

=== Page.xhtml ===

<ice:selectManyCheckbox id="idSelectManyCheckbox" layout="spread"
   value="#{MyBean.selectedsValuesCheckbox}" >
   <f:selectItems value="#{MyBean.selectItemsCheck}"/>
</ice:selectManyCheckbox>

<ice:dataTable varStatus="rowVar"
   value="#{MyBean.listOfMyObjects}" var="anyNameVar">

   <ice:column>
      <ice:checkbox for="idSelectManyCheckbox" index="#{rowVar.index}" />
   </ice:column>
   <ice:column>
      <ice:outputText value="#{anyNameVar.property1}" />
   </ice:column>

   <!-- ... more columns .. -->
</ice:dataTable>

=== MyBean.java ===

private List<MyObject> listOfMyObjects = new ArrayList<MyObject>(3);
private List<String> selectedsValuesCheckbox = new ArrayList<String>(2);
private SelectItem[] selectItemsCheck = new SelectItem[3];

private handleSelectItemsCheck(){
   int idx = 0;
   selectedsValuesCheckbox.add("1");
   selectedsValuesCheckbox.add("3");
   for (MyObject myObject : listOfMyObjects) {
      selectItemsCheck[idx++] = 
    new SelectItem(myObject.property1, myObject.property2); // value and label
   }
}

// Получает и устанавливает

===============================================================

*you must use layout="spread" in that situation.
*in the table the checkboxs 1 and 3 will be selected. because "selectedsValuesCheckbox"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...