Java JSF h:selectManyCheckbox-insideui:repeat-via-Map-entry

Java JSF h:selectManyCheckbox-insideui:repeat-via-Map-entry,java,jsf,jsf-2,map,Java,Jsf,Jsf 2,Map,我遇到了一个问题,当我将值作为String放入List内部时,当我按下按钮时,我看到List只包含ui的最后一个元素的记录:repeat <ui:repeat value="#{util:toList(test.mapQestionsWithAnswers)}" var="entry"> <h:inputHidden value="#{entry.key.questionId}" /> <h:outpu

我遇到了一个问题,当我将值作为
String
放入
List
内部
时,当我按下按钮时,我看到
List
只包含ui的最后一个元素的记录:repeat

<ui:repeat value="#{util:toList(test.mapQestionsWithAnswers)}" var="entry">
                <h:inputHidden value="#{entry.key.questionId}" />
                <h:outputText value="#{entry.key.question}"
                    rendered="#{not empty entry.value}" />
                <p:selectManyCheckbox value="#{test.questionAnswerList}"
                    layout="pageDirection">
                    <f:selectItems value="#{entry.value}" var="ans"
                        itemValue="#{entry.key.questionId} #{ans.answer.answerId}"
                        itemLabel="${ans.answer.answer}" />
                </p:selectManyCheckbox>
            </ui:repeat>
但这对我没有帮助,我可以进入
列表
,只需将
中最后一个问题的答案配对即可。似乎在每次迭代之后,问题回答列表都变为空

//好的,我读了一些文章

我决定使用map>

但在这一部分中,错误
ClassCastException
String不能强制转换为List

public List<String> getQuestionAnswerList() {
    // return questionAnswerList;
    List<String> selectedQuestionAnswer = new ArrayList<String>();
    if (!selectedItems.isEmpty()) {
        Set<Long> idsSet = selectedItems.keySet();
        for(Long questionId : idsSet){              
            List<String> questionAnswerPair = selectedItems.get(questionId);
            selectedQuestionAnswer.addAll(questionAnswerPair);
        }
    }
    return selectedQuestionAnswer;
}
<p:selectManyCheckbox value="#{test.selectedItems[question.questionId]}"
                    layout="pageDirection">
                    <f:selectItems value="#{question.questionAnswers}" var="ans"
                        itemValue="#{ans.questionAnswerIdentifer.questionId} #{ans.questionAnswerIdentifer.answerId}"
                        itemLabel="#{ans.answer.answer}" />
                </p:selectManyCheckbox> 
public List getQuestionAnswerList(){
//返回问题回答列表;
List selectedQuestionAnswer=new ArrayList();
如果(!selectedItems.isEmpty()){
Set idsSet=selectedItems.keySet();
对于(长问题ID:idsSet){
List questionAnswerPair=selectedItems.get(questionId);
选择问题答案。添加全部(问题答案对);
}
}
返回所选问题答案;
}
如何获取
列表中的所有选定值?

您可以制作一个映射(例如称之为
myMap
),其中键将位于
条目。键和值将是一个类型相同的列表,如
questionAnswerList

差不多

<p:selectManyCheckbox value="#{test.myMap[entry.key].questionAnswerList}"
    layout="pageDirection">
    <f:selectItems value="#{entry.value}" var="ans"
        itemValue="#{entry.key.questionId} #{ans.answer.answerId}"
        itemLabel="${ans.answer.answer}" />
</p:selectManyCheckbox>


@Daniel谢谢,但这没有帮助(我的意思不是说一般情况下你不应该使用
$
,而不是作为答案…你应该创建一个地图,根据question@Ok我试着照你说的去做,但遇到了其他问题above@Ray而不是
itemValue=“#{ans.questionAnswerIdentifer.questionId}#{ans.questionAnswerIdentifier.answerId}“
使
项值
成为
问题回答列表
类型
,因为现在
”{ans.questionAnswerIdentifier.questionId}{ans.questionAnswerIdentifier.answerId}”
是字符串这对我不起作用。我得到一个对象数组,但无法转换为myObjectType。@Daniel你知道这个示例还缺少什么吗?我可以通过电子邮件或其他方式来简化我的代码。谢谢you@allegjdm93,我建议你发一个新问题
<p:selectManyCheckbox value="#{test.myMap[entry.key].questionAnswerList}"
    layout="pageDirection">
    <f:selectItems value="#{entry.value}" var="ans"
        itemValue="#{entry.key.questionId} #{ans.answer.answerId}"
        itemLabel="${ans.answer.answer}" />
</p:selectManyCheckbox>