簡體   English   中英

ui:rep中的JSF h:selectManyCheckbox通過地圖項重復

[英]JSF h:selectManyCheckbox inside ui:repeat via Map entry

我面臨的問題,當我把值作為StringList<String>里面<ui:repeat>當我按下按鈕,我看到List<String>僅僅包含了用戶界面的最后一個元素記錄:重復。

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

來自Baluscanswer的util:toList的想法如何在jsf中顯示哈希圖值?

//更新我不使用map重寫此代碼

<ui:repeat value="${test.questionList}" var="question">
                <h:outputText value="#{question.question}"
                    rendered="#{not empty question}" />
                <p:selectManyCheckbox value="#{test.questionAnswerList}"
                    layout="pageDirection">
                    <f:selectItems value="#{question.questionAnswers}" var="ans"
                        itemValue="#{ans.questionAnswerIdentifer.questionId} #{ans.questionAnswerIdentifer.answerId}"
                        itemLabel="#{ans.answer.answer}" />
                </p:selectManyCheckbox>
            </ui:repeat>

但這對我沒有幫助,我可以進入List<String>只是將<ui:repeat/>最后一個問題的問題答案配對。 似乎在每個迭代問題之后,AnswerList變為空

//好,我讀了一些ui:repeat的Primefaces ManyCheckbox文章:僅在上一次循環時才調用setter方法

我決定使用地圖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> 

如何獲取List<String>所有選擇的值?

你可以做一個地圖(稱之為myMap為例),其中關鍵是entry.key和值是相同類型等的列表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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM