JSF:在dataTable或panelGrid中显示动态值

时间:2012-03-19 13:25:40

标签: jsf datatable radio-button survey tomahawk

我想创建自己的jsf标签以显示我的项目关于在线调查的表格。在第一行中,应该有一个标题和动态的图像数量(表情符号)。在第一行之后,应该有类似图像的selectOneRadios的问题和相同的计数。结果应该是一个包含问题列的表格和可能的调查答案的动态列。

我想我需要三个循环。第一个显示表头中的图像,第二个列出所有问题,第三个循环列出每个问题的所有可能答案(或selectOneRadio)。我尝试使用 h:dataTable,因为这可以循环我的问题,但其他动态数据是什么?

注意:由于我们的cms,我必须只使用jsf 1.2组件。

感谢您的帮助
yves beutler

1 个答案:

答案 0 :(得分:1)

如果我找对你,你想要这样的东西:

在JSP中:

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

在Controller中,您将返回一个问题列表:

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