Пользовательские элементы выбора

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

<h:selectManyCheckbox value="#{myBean.checkboxesArry}" layout="pageDirection">

              <f:selectItems value="#{myBean.mapOfCheckBoxes}" var="entry">                            
                <label>           
                <ice:graphicImage url="/resources/images/myImage.bmp"/>            
                <b>#{entry.value}</b>           
                </label>
              </f:selectItems>

            </h:selectManyCheckbox>

посоветуйте как это сделать?


person Mahmoud Saleh    schedule 14.12.2011    source источник


Ответы (1)


Вы не можете вкладывать компоненты пользовательского интерфейса в <f:selectItems> таким образом. Однако я вижу, что вы используете ICEfaces, тогда вы сможете использовать <ice:selectManyCheckbox layout="spread"> в сочетании с <ice:checkbox> вместо этого.

<ice:selectManyCheckbox id="foo" value="#{myBean.checkboxesArry}" layout="spread">
    <f:selectItems value="#{myBean.mapOfCheckBoxes}" />
</ice:selectManyCheckbox>

<c:forEach items="#{myBean.mapOfCheckBoxes}" var="entry" varStatus="loop">
    <ice:checkbox for="foo" index="#{loop.index}" />
    <ice:graphicImage url="/resources/images/myImage.bmp" />
    <b>#{entry.value}</b>
</c:forEach>

(не тестировалось, поскольку я не использую ICEfaces, но описанная выше конструкция работает для Tomahawk, из которого ICEfaces в основном скопировала реализацию; вы также можете использовать <ui:repeat>, но он поддерживает только Map, начиная с JSF 2.1)

Смотрите также:

person BalusC    schedule 14.12.2011
comment
когда я попытался, чтобы флажки вообще не отображались, нужно ли указывать имя формы перед идентификатором? - person Mahmoud Saleh; 14.12.2011
comment
Просто для проверки, что, если вы укажете флажки индивидуально с фиксированным идентификатором? Вот так <ice:checkbox for="foo" index="0" /> и т. д. Если это сработает, попробуйте <ui:repeat> вместо <c:forEach>, только с List вместо Map, если вы еще не используете JSF 2.1. - person BalusC; 14.12.2011
comment
фиксированный идентификатор работает нормально, но ui:repeat тоже не работает, странно! Любые идеи ? - person Mahmoud Saleh; 14.12.2011
comment
ну, после отладки я обнаружил, что делаю что-то не так, я инициализировал карту в методе prerenderView, в то время как foreach получает доступ к карте перед этой фазой, не совсем понимаю, почему, но теперь она работает нормально. - person Mahmoud Saleh; 14.12.2011
comment
но есть ли способ сделать метку флажка динамической на основе условия сделать метку полужирным или нет? - person Mahmoud Saleh; 14.12.2011
comment
Просто используйте <h:outputText styleClass="#{someCondition ? 'bold' : ''}">. - person BalusC; 14.12.2011
comment
Что касается инициализации карты, <c:forEach> — это тег времени построения представления, а не тег времени рендеринга вида, как <ui:repeat>. Поэтому вам нужно вместо этого инициализировать (пост) конструктор или заменить его на <ui:repeat>. - person BalusC; 14.12.2011
comment
еще один вопрос, я хотел добавить после флажка условное изображение и условный стиль для метки, приведенный выше код генерирует image > bold text > checkbox > checkbox text, в то время как я думаю, что это будет генерировать только: image > bold text > checkbox, пожалуйста, посоветуйте, как это сделать - person Mahmoud Saleh; 14.12.2011
comment
Удалите метки со значения <f:selectItems>. - person BalusC; 14.12.2011
comment
Просто не поставляйте ярлыки предметов. Например. itemLabel="". - person BalusC; 14.12.2011
comment
ну, я пробовал следующее, но все еще отображал метку после флажка: <f:selectItems value="#{messageBean.toSendCheckBoxes}" itemLabel=""/> - person Mahmoud Saleh; 14.12.2011
comment
попробовал следующее, но тоже не работает: <f:selectItems value="#{messageBean.toSendCheckBoxes}" var="entry" itemValue="#{entry.value}" itemLabel=""/> - person Mahmoud Saleh; 14.12.2011
comment
Нет? Извините, тогда я этого не знаю. Задайте новый вопрос. Возможно, это связано с ICEfaces. - person BalusC; 14.12.2011
comment
задан еще один вопрос, но есть идеи, как отобразить список в приведенном выше коде по вертикали, а не по горизонтали, я имею в виду, чтобы он был эквивалентен макету pageDirection? - person Mahmoud Saleh; 14.12.2011
comment
Заверните их в <div style="float:left;">. - person BalusC; 14.12.2011