我有一个名为Question的bean,有很多替代品 - >
Question have 1:N Alternative.
我有一个有很多问题的页面,例如:
Page have 1:N Question
我需要创建一个XHTML页面,显示问题的数量和替代方案,如下所示:
<c:forEach var="questaoCurso"
items="#{cursandoMB.paginaAtualProva.questoesCurso}">
<h:outputText value="#{questaoCurso.questao.texto}" />
<br />
<h:selectOneRadio style="font-weight: normal"
value="#{cursandoMB.alternativasEscolhida}" layout="pageDirection">
<f:selectItems value="#{questaoCurso.questao.alternativasPreenchidas}"
var="c"
itemValue="#{c}"
itemLabel="#{c.texto}" />
</h:selectOneRadio>
<br />
<br />
</c:forEach>
问题在于我不知道如何在ManagedBean的List中设置每个选项。我无法为每个问题创建一个变量,因为这是动态的,我不知道设计时的问题数量。
已解决:
我在RadioButton中使用了Map,请参阅:
<h:selectOneRadio
value="#{cursandoMB.alternativasEscolhidas[questaoCurso]}" converter="entityConverter" layout="pageDirection">
<f:selectItems
value="#{questaoCurso.questao.alternativasPreenchidas}" var="c"
itemValue="#{c}" itemLabel="#{c.texto}" />
</h:selectOneRadio>
答案 0 :(得分:0)
首先,你不能混合渲染时间(例如f:selectItems,h:inputText ...)和构建时标签(JSTL标签,f:actionListener,ui:include .. 。),为了更好地理解视图构建时间和渲染时间概念及其工作原理,请查看BalusC的答案:JSTL in JSF2 Facelets... makes sense?
所以IMO唯一要替换的是带有c:forEach
的{{1}}标记,如下所示:
ui:repeat
ui:repeat Tag的<ui:repeat var="questaoCurso"
value="#{cursandoMB.paginaAtualProva.questoesCurso}">
<h:outputText value="#{questaoCurso.questao.texto}" />
<br />
<h:selectOneRadio style="font-weight: normal"
value="#{cursandoMB.alternativasEscolhida}" layout="pageDirection">
<f:selectItems value="#{questaoCurso.questao.alternativasPreenchidas}"
var="c"
itemValue="#{c}"
itemLabel="#{c.texto}" />
</h:selectOneRadio>
<br />
<br />
</ui:repeat>
属性为:
此标记迭代的项目集合的名称。该 集合可以是List,数组,java.sql.ResultSet或个人 java对象。如果集合为null,则此标记不执行任何操作。
因此,您可以在value
中使用List
对象,在您的情况下,它将是一个问题对象列表,在您的问题bean中,您可以包含value
个答案(而List
也可能是一个bean)。