Jon*_*nes 2 jsf input uirepeat
我正在显示数据库中的问题列表,每个问题我都要显示一个选项列表,在本例中是单选按钮.
<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>
Run Code Online (Sandbox Code Playgroud)
我需要为每个问题保存选中的选项.
我怎样才能做到这一点?
您需要以var
某种方式将输入值与重复变量相关联.现在你没有在任何地方这样做,基本上将所有输入值绑定到同一个bean属性.因此,当表单被提交时,每次迭代都将使用当前迭代轮的值每次覆盖bean属性,直到最终获得最后一次迭代的值为止.这绝对不对.
最简单的方法是直接将其与表示的对象相关联var
:
<p:selectOneRadio value="#{question.selectedOption}">
Run Code Online (Sandbox Code Playgroud)
在您的具体情况下,这只会将"问题"模型与"答案"模型紧密联系在一起.将它们分开是合理的.在特定情况下,更合适的解决方案是映射它与当前迭代#{question}
的键(前提是它有一个正确的equals()
和hashCode()
实现,很明显):
<p:selectOneRadio value="#{formData.selectedOptions[question]}">
Run Code Online (Sandbox Code Playgroud)
附:
private Map<Question, String> selectedOptions = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
无论采用何种方法,在动作方法中,只需迭代它就可以全部收集它们.
归档时间: |
|
查看次数: |
1364 次 |
最近记录: |