我正在使用 JSF 2 开发一个 Web 应用程序。
我的网络应用程序除其他外还包含一系列问题,一次提出一个问题(因此一次可以看到一个问题),并且有多个答案(我使用 h:selectManyCheckbox)。
我将问题和可能的答案存储在 ArrayList(“gridQuestionListClone”)中,并将用户答案(在最后检查之前)存储在 HashMap(“allQuestionUserAnswerMap”)中。 (如果答案需要,我可以更改存储方式)。
当用户回答完所有问题后,我想让用户能够重新检查页面中的所有问题和答案(我希望预加载答案)。因此,所有问题及其相应的复选框(每个问题 3 个)以及用户在一页中选中的复选框。
因此,我使用 ui:repeat 来浏览所有问题和可能的答案,我需要一种机制来检查正确的复选框(用户选中的),并让用户可以在按下提交按钮时更改他/她的答案(例如)了解哪些复选框对应哪些问题。
一个让事情变得更清楚的草图:))(也许)。因此,当用户回答完我想向他展示的所有单个问题时:
Question 1:
a) answer1 - CHECKED
b) answer2 - UNCHECKED
c) answer3 - CHECKED
------------------------
Question 2:
a) answer1 - UNCHECKED
b) answer2 - UNCHECKED
c) answer3 - CHECKED
------------------------
Question 3:
a) answer1 - CHECKED
b) answer2 - CHECKED
c) answer3 - UNCHECKED
------------------------
.
.
.
Question n:
a) answer1 - CHECKED
b) answer2 - UNCHECKED
c) answer3 - CHECKED
------------------------
SUBMIT button
用户检查他/她的答案并根据需要进行修改,然后按提交按钮。
然后我想要一个某种类型的集合(或者多个我并不关心的集合,之后我可以合并它们),其中包含问题的数量和可能的答案,例如在“allQuestionUserAnswerMap”中的乞求或类似的东西。
我的简单代码(不正确):
<ui:repeat var="p" value="#{gridPopUpBean.gridQuestionListClone}">
<hr />
<h:panelGrid columns="2">
...
<h:panelGroup style="text-align: left">
<h:selectManyCheckbox
value="#{gridPopUpBean.oneQuestionUserAnswerList}"
layout="pageDirection">
<f:selectItem itemValue="a"
itemLabel="#{p.a}" />
<f:selectItem itemValue="b"
itemLabel="#{p.b}" />
<f:selectItem itemValue="c"
itemLabel="#{p.c}" />
</h:selectManyCheckbox>
...
</h:panelGroup>
</h:panelGrid>
</ui:repeat>
有任何想法吗?
最简单的方法是将复选框组的值绑定到当前迭代的对象,而不是将所有复选框组绑定到同一个父 bean 属性。
在代码中,只需替换
value="#{gridPopUpBean.oneQuestionUserAnswerList}"
by
value="#{p.oneQuestionUserAnswerList}"
并对模型进行相应的更改。
或者,您也可以提供Map
父 bean 中按问题 ID 列出的所有答案。这是一个启动示例,它使用了比您更多的自记录变量名称,以便更好地理解:
<ui:repeat value="#{bean.questions}" var="question">
...
<h:selectManyCheckbox value="#{bean.answers[question.id]}">
<f:selectItems value="#{question.answers}" />
</h:selectManyCheckbox>
...
</ui:repeat>
例如
private Map<Long, Answer[]> answers = new HashMap<Long, Answer[]>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)