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