JSF: отображение динамических значений в dataTable или panelGrid

Я хочу создать свой собственный jsf-тег для отображения сетки таблицы для моего проекта об онлайн-опросах. В первой строке должен быть заголовок и динамическое количество изображений (смайлов). После первой строки должны быть вопросы и такое же количество selectOneRadios, как и изображений. В результате должна получиться таблица со столбцом вопросов и динамическими столбцами для возможных ответов на опрос.

Думаю, мне нужно три петли. Первый для отображения изображений в заголовке таблицы, второй для вывода списка всех вопросов и третий цикл для вывода списка всех возможных ответов (или selectOneRadio) на каждый вопрос. Я пытался использовать h:dataTable, потому что это могло зацикливаться на моих вопросах, но как насчет других динамических данных?

примечание: из-за нашей cms необходимо, чтобы я использовал только компоненты jsf 1.2.

спасибо за помощь
Ив Бейтлер


person yves.beutler    schedule 19.03.2012    source источник


Ответы (1)


Если я правильно понял, вам нужно что-то вроде этого:

В ЖСП:

<h:dataTable value="#{myBean.questions}"
                   var="question">
        <h:column>
          <f:facet name="header" >
            <h:outputText value="Question"/>
          </f:facet>
          <h:outputText value="#{question.title}"/>
        </h:column>
        <h:column>
          <f:facet name="header" >
            <!-- smilies go here -->
          </f:facet>
          <h:selectOneRadio>
            <f:selectItems value="#{question.options}"/>
          </h:selectOneRadio>
        </h:column>
      </h:dataTable>

В контроллере вы вернете список вопросов:

public List<Question> getQuestions(){
    List<Question> questions = new ArrayList<Question>();
    questions.add(new Question("How did you like this?"));
    questions.add(new Question("How did you like that?"));
    return questions;
  }

и ваш класс вопросов может выглядеть примерно так:

public class Question{

    private final String title;

    public Question(String title){
      this.title = title;
    }

    public String getTitle(){
      return title;
    }

    public List<SelectItem> getOptions(){
      List<SelectItem> items = new ArrayList<SelectItem>();
      items.add(new SelectItem("1", "Very much"));
      items.add(new SelectItem("2", "okay"));
      items.add(new SelectItem("3", "not that good"));
      items.add(new SelectItem("4", "bad"));

      return items;
    }
  }
person Tim Büthe    schedule 19.03.2012
comment
Спасибо за Ваш ответ. Я попытаюсь запрограммировать ваш фрагмент кода и опубликовать его здесь. Кстати, я должен использовать Facelets, но я думаю, что это не имеет значения. - person yves.beutler; 22.03.2012
comment
Теперь я запрограммировал это, и это полностью так, как я хотел. Спасибо, Тим, за отличный ответ. Приятного отдыха - person yves.beutler; 23.03.2012