【问题标题】:input component inside ui:repeat, how to save submitted valuesui:repeat 中的输入组件,如何保存提交的值
【发布时间】:2022-01-05 15:36:02
【问题描述】:

我正在显示来自数据库的问题列表,对于每个问题,我必须显示选项列表,在本例中为单选按钮。

<ui:repeat value="#{formData.questions}" var="question">
    <div>
        <p:outputLabel value="#{question.name}" />
        <p:selectOneRadio value="#{formData.selectedOption}">
            <f:selectItems value="#{formData.options}" />
        </p:selectOneRadio>
    </div>
</ui:repeat>

我需要为每个问题保存选中的选项。

我该怎么做?

【问题讨论】:

  • 这有什么不适用的? (根据您的需要,您可以选择使用其他迭代组件,特别是在这种情况下,&lt;p:dataList&gt;。作为奖励,如果列表洞问题太长,您将收到一个开箱即用的分页工具)。

标签: jsf input uirepeat


【解决方案1】:

您需要以某种方式将输入值与重复变量var 关联起来。现在你没有在任何地方这样做,并且基本上将 all 输入值绑定到一个相同的 bean 属性。因此,当表单被提交时,每次迭代都将使用当前迭代轮次的值覆盖 bean 属性,直到您最终获得最后一轮迭代轮次的值。这绝对是不对的。

最简单的方法是直接将其与var所代表的对象相关联:

<p:selectOneRadio value="#{question.selectedOption}">

在您的具体情况下,这只会将“问题”模型与“答案”模型紧密结合。将它们分开是合理的。在您的特定情况下,更合适的解决方案是将当前迭代的 #{question} 映射为键(前提是它具有正确的 equals()hashCode() 实现,显然):

<p:selectOneRadio value="#{formData.selectedOptions[question]}">

与:

private Map<Question, String> selectedOptions = new HashMap<>();

无论采用何种方法,在 action 方法中,只需对其进行迭代以收集它们。

【讨论】:

  • 我正在使用地图方法,那么清除地图的正确位置是什么?我使用会话范围托管 bean 进行考试的第二件事是正确的吗?最后我只需要知道将 jpa Entity 对象传递给 JSF 页面的正确方法是什么?
  • 感谢它的帮助!您能否分享一些关于将 JPA 实体放入 jsf 层的良好做法的想法?
  • @eatSleepCode: stackoverflow.com/q/30639785 如果你想要更多链接,请查看jsf.zeef.com/bauke.scholtz
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2017-12-05
  • 2011-01-18
  • 2015-06-20
  • 2012-12-01
相关资源
最近更新 更多