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>