【问题标题】:Many SelectOneMenuRadio in a forEach [duplicate]forEach中的许多SelectOneMenuRadio [重复]
【发布时间】:2015-04-28 01:55:13
【问题描述】:

我有一个叫做 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 的列表中设置每个选择选项。我不能为每个问题创建一个变量,因为这是动态的,我不知道设计时问题的数量。

已解决:

我在 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>

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    首先,您不能混合渲染时(例如 f:selectItems、h:inputText ...)和构建时标签(JSTL 标签、f:actionListener、ui:include .. .),要更多地了解视图构建时间和渲染时间概念及其工作原理,请查看此 BalusC 的答案:JSTL in JSF2 Facelets... makes sense?

    所以 IMO 唯一要替换的是 c:forEach 标记与 ui:repeat 像这样:

    <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>
    

    ui:repeat Tagvalue 属性为:

    此标记迭代的项目集合的名称。这 集合可以是 List、数组、java.sql.ResultSet 或单个 java 对象。如果集合为空,则此标签不执行任何操作。

    因此,您可以在 value 中使用 Object 的 List,在您的情况下,这将是 Question 对象列表,并且在您的 Question bean 中,您可以包含 List 的答案(而 Answer 可能也可以是豆子)。

    【讨论】:

    • 但问题是 SelectOneMenuRadio 的 value 属性应该是一个列表:value="#{cursandoMB.alternativasEscolhida}"。我该怎么做?
    • @Shelly “我该怎么做”是什么意思?您的变量alternativasEscolhida 必须是Question 对象的列表?这里有什么问题?!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2018-03-01
    • 2013-04-06
    • 2017-03-09
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多