我正在使用JSF和IceFaces创建一个在线调查应用程序。调查问卷可以有很多问题。每个问题可以是复选框、单选按钮、文本框等类型中的任何一种,具有多个选项。
现在我需要在jsf中每页显示一个问题。我正在从数据库中获取问题类型,问题,选项列表(opt1, opt2, opt3…)数据。
当用户点击上一个按钮时,我需要回到上一个问题。当用户点击下一步按钮时,我需要转到下一个问题。最后,当用户点击提交按钮时,需要将调查数据存储在数据库中。
如何根据问题类型呈现组件?(如果问题类型是复选框的意思,我需要显示复选框。如果问题类型是单选按钮的意思,我需要显示单选按钮…)
我该怎么做?有人能帮我一下吗?
如果有这种类型的例子请分享给我链接
使用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>