ui:repeat里面的输入组件,如何保存提交的值
input component inside ui:repeat, how to save submitted values
我正在显示数据库中的问题列表,对于每个问题我都必须显示选项列表,在本例中为单选按钮。
<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>
我需要为每个问题保存选中的选项。
我该怎么做?
您需要以某种方式将输入值与重复变量var
相关联。现在您不会在任何地方这样做,并且基本上将 所有 输入值绑定到同一个 bean 属性。因此,当提交表单时,每次迭代都会使用当前迭代轮的值覆盖 bean 属性,直到您最终获得上一轮迭代的值。这绝对不对。
最简单的方法是直接将其与var
表示的对象相关联:
<p:selectOneRadio value="#{question.selectedOption}">
在您的特定情况下,这只会将 "question" 模型与 "answer" 模型紧密耦合。将它们分开是合理的。在您的特定情况下,更合适的解决方案是将其映射为当前迭代的 #{question}
作为键(前提是它具有适当的 equals()
和 hashCode()
实现,显然):
<p:selectOneRadio value="#{formData.selectedOptions[question]}">
与:
private Map<Question, String> selectedOptions = new HashMap<>();
无论采用哪种方法,在操作方法中,只需遍历它即可将它们全部收集起来。
我正在显示数据库中的问题列表,对于每个问题我都必须显示选项列表,在本例中为单选按钮。
<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>
我需要为每个问题保存选中的选项。
我该怎么做?
您需要以某种方式将输入值与重复变量var
相关联。现在您不会在任何地方这样做,并且基本上将 所有 输入值绑定到同一个 bean 属性。因此,当提交表单时,每次迭代都会使用当前迭代轮的值覆盖 bean 属性,直到您最终获得上一轮迭代的值。这绝对不对。
最简单的方法是直接将其与var
表示的对象相关联:
<p:selectOneRadio value="#{question.selectedOption}">
在您的特定情况下,这只会将 "question" 模型与 "answer" 模型紧密耦合。将它们分开是合理的。在您的特定情况下,更合适的解决方案是将其映射为当前迭代的 #{question}
作为键(前提是它具有适当的 equals()
和 hashCode()
实现,显然):
<p:selectOneRadio value="#{formData.selectedOptions[question]}">
与:
private Map<Question, String> selectedOptions = new HashMap<>();
无论采用哪种方法,在操作方法中,只需遍历它即可将它们全部收集起来。