2010-04-23 4 views
2

Я пытаюсь создать grooup h: selectOneRadio, но ui: repeat дает ему разные идентификаторы для каждой строки. Это мой код: -Как создать группу h: selectOneRadio в JSF?

       <ui:repeat id="themes" value="#{RegisterBean.objBlogTemplateList}" var="item"> 

            <p:graphicImage alt="#{item.templatePicName}" style="border: solid 5px white;width: 200px;height: 200px;" value="#{app:getCommonImagePath(item.templatePicName)}"/> 

            <h:selectOneRadio rendered="false" value="#{RegisterBean.blogTemplateId}" layout="lineDirection" id = "rdTemplateId"> 
             <f:selectItem itemLabel="#{item.templateName}" itemValue="#{item.templateId}"/> 
            </h:selectOneRadio> 

           </ui:repeat> 

На самом деле я хочу, чтобы создать единый переключатель с различным selectItems в нем, которые должны быть из строк моей таблицы в базе данных. Как мне это сделать?

+0

Функциональное требование неясно. «Одиночный переключатель с разными позициями»? Это невозможно. Каждая кнопка может иметь только один элемент. Пожалуйста, дополните. Как именно они должны быть сгруппированы? Разве вы не хотите, чтобы вы хотели ** группу ** кнопок * за строку? * Другими словами: в каждой строке есть своя группа связанных кнопок? – BalusC

ответ

1

Вы не сможете сделать это с помощью компонента JSF из коробки. Однако довольно просто реализовать пользовательский рендерер, чтобы выполнить то, что вам нужно. Я бы предложил сбросить URL-адрес изображения в поле описания SelectItem, поскольку это почти никогда не используется. Затем в вашем рендерере просто поместите это значение в тег IMG.

Я написал немного о специализированном рендерере для selectboxes here - для вас должен быть идентичный процесс.

0

<t:selectOneRadio> поддерживает layout="spread", чтобы вы могли распространять отдельные кнопки параметров из одной группы.

+0

Это, кстати, не будет легким в петле внутри данных. – BalusC

+0

Возможно, я неправильно понял вопрос. Сначала я думал о f: selectItems, но потом что-то зажегся наличием стола и радио в каждой строке. У меня был точно такой же сценарий, и t: selectOneRadio сделал это легко. Давайте посмотрим, что он на самом деле хочет :) – Bozho

+0

Привет, Божо, вы можете представить себе мое требование быть чем-то вроде «h: selectOneRadio внутри datatable». Я прочитал статью BalusC и внедрил ее. Он работает, но делать это не так-то просто. Мое требование: - скажем, предположим, что у меня три строки в таблице, как «Apple, Mango, Banana», и у меня есть три их изображения: «apple.jpg ,, mango.jpg, banana.jpg». Я хочу, чтобы интерфейс выглядел следующим образом: - Яблочная фотография, а затем опция яблока, фотография банана, затем отобразилась фотография банана, а затем отобразилась фотография манго и опция манго. »Они ведут себя как группа, и я могу выбрать только один из них. – TCM

1

Это больше похоже на то, что вам нужно <f:selectItems>.

<h:dataTable value="#{bean.items}" var="#{item}"> 
    <h:column> 
     <h:selectOneRadio value="#{item.selectedTemplate}"> 
      <f:selectItems value="#{bean.availableTemplates}" /> 
     </h:selectOneRadio> 
    </h:column> 
    ... 

Вы можете кормить его с SelectItem[], List<SelectItem> или Map<Object, String>.

+0

Hi BalusC, What, если я хочу отображать графическое изображение вместе с < h: selectOneRadio>? Я попытался поместить h: graphicImage внутри f: selectItems, но это не сработало. – TCM

+0

Либо захватите CSS/JS, либо используйте другой компонент (у RichFaces есть тот, где это возможно, если я правильно помню), или переопределить рендеринг. – BalusC

Смежные вопросы