jsf渲染组件类型?

时间:2011-07-16 12:19:22

标签: jsf datatable dynamic-forms

我正在使用JSF和IceFaces创建一个在线调查应用程序。调查可以有任何问题。每个问题可以是任何一种类型复选框,单选按钮,文本框等,有多个选项。

现在我需要在jsf中每页显示一个问题。我从db获取问题类型,问题,选项列表(opt1,opt2,opt3 ...)数据。

当用户点击上一页按钮时,我需要回到之前的问题。 当用户点击下一个按钮时,我需要转到下一个问题。 最后,当用户单击“提交”按钮时,需要将调查数据存储在数据库中。

如何根据问题类型渲染组件? (如果问题类型是复选框意味着,我需要显示复选框。如果问题类型是单选按钮意味着,我需要显示单选按钮..)

我该怎么做?有人可以帮我这个吗?

如果此类型的任何示例请与我分享链接。

1 个答案:

答案 0 :(得分:3)

使用rendered属性。如果attiribute中的EL条件评估true,则组件将HTML呈现给输出,否则不会。

所以,假设你有一个

public class Question {

    public enum Type { 
        SINGLE, MULTIPLE;
    }

    private Long id;
    private Type type;
    private String text;
    private List<Answer> answers;

    // ...
}

然后您可以按如下方式使用它:

<h:dataTable value="#{bean.questions}" var="question">
    <h:column>
        <h:selectOneRadio value="#{bean.answers[question.id]}" rendered="#{question.type == 'SINGLE'}">
            <f:selectItems value="#{question.answers}" />
        </h:selectOneRadio>
        <h:selectManyCheckbox value="#{bean.answers[question.id]}" rendered="#{question.type == 'MULTIPLE'}">
            <f:selectItems value="#{question.answers}" />
        </h:selectManyCheckbox>
    </h:column>
</h:dataTable>