2015-01-20 31 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