1

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

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

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

如何根据问题类型呈现组件?(如果问题类型是复选框的意思,我需要显示复选框。如果问题类型是单选按钮的意思,我需要显示单选按钮..)

我怎样才能做到这一点?谁能帮我解决这个问题?

如果有关于这种类型的任何示例,请与我分享链接。

4

1 回答 1

3

使用rendered属性。如果属性中的 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>
于 2011-07-17T08:59:40.750 回答