2012-03-19 55 views
0

我想创建自己的jsf标记,以显示我的项目有关在线调查的表格网格。在第一行中,应该有一个标题和一个动态计数的图像(笑脸)。在第一行之后,应该有问题和相同数量的selectOneRadios像图像。结果应该是一个包含问题栏和可能的调查答案的动态栏的表格。JSF:在dataTable或panelGrid中显示动态值

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

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

感谢您的帮助
伊夫·博伊特勒

回答

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> 

在控制器你会返回一列问题:

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

谢谢您的回答。我会尝试对您的代码片段进行编程并将其发布到此处。顺便说一句,我必须使用Facelets,但我认为这并不重要。 – 2012-03-22 07:08:33

+1

现在我编程它,它完全是我想要的方式。谢谢蒂姆你的伟大答案。当天有很好的休息 – 2012-03-23 09:22:50

+0

非常欢迎。 – 2012-03-23 10:06:15