2015-01-20 28 views
2

我正在显示数据库中的问题列表,对于每个问题,我必须显示选项列表,在本例中为单选按钮。UI中的输入组件:重复,如何保存提交的值

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

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

我该怎么做?

+0

什么不适用于此? (根据您的需要,您可以选择使用其他迭代组件,例如特别是在这种情况下,[http://www.primefaces.org/showcase/ui/data/dataList.xhtml]。作为奖励,如果列表中的问题太长,您将收到一个开箱即用的分页功能)。 – Tiny 2015-01-20 20:49:15

回答

5

您需要以某种方式将输入值与重复变量var相关联。现在你不会那么做,并且基本上将全部输入值绑定到同一个bean属性。所以,当表单被提交时,每次迭代都会使用当前迭代的值每次覆盖bean属性,直到最终获得最后一次迭代的值。这绝对是不对的。

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

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

在特定情况下,这只是紧耦合“问题”模型“答案”的模式。让他们分开是合理的。在特定情况下,更合适的解决方案是映射它与当前迭代#{question}关键(前提是它有一个适当的equals()hashCode()实施,很明显):

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

有了:

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

不管的方法,在动作方法中,只是迭代它来收集所有。

+0

我正在使用地图方法,那么清除地图的正确位置是什么?第二件事我使用会话范围管理bean考试是否正确?最后我只需要知道将jpa Entity对象传递给JSF页面的正确方法是什么? – eatSleepCode 2015-10-08 11:37:39

+0

@eatSleepCode:http://stackoverflow.com/q/7031885 – BalusC 2015-10-08 11:56:07

+0

感谢它帮助!你能分享一下关于JPA实体进入jsf层的好习惯的一些想法吗? – eatSleepCode 2015-10-08 12:24:19