2012-12-21 21 views
1

我有一個jsf頁面上有多個單選按鈕組(動態生成)。我需要從支持bean中檢索它的值,但是沒有這樣做。JSF的多個selectOneRadio組在頁面上:如何恢復這些值?

業務:用戶想要訂閱由多組coursedays組成的課程。用戶可以選擇離場。因此,如果一門課程例如由4個coursedays,在3個不同團體舉辦的,用戶可以從12個coursedays選擇,在第3

的XHTML頁面的相關部分的塊:

<c:forEach var="cd1" items="#{coursedayBean.getCoursedays(groupBean.getFirstGroup}"> 
    <h:selectOneRadio value="#{subscriptionBean.selectedCoursedays[cd1.sequenceNr]}" > 
    <f:selectItems value="#{coursedayBean.getCoursedaysSelectItems}"/> 
    </h:selectOneRadio> 
</c:forEach> 

這導致了我想要檢索n個值的* m矩陣的單選按鈕。 selectItems類型爲<Long, String>

我支持bean中,我宣佈:

public List<String> getSelectedCoursedays() { 
    return selectedCoursedays; 
} 

public void setSelectedCoursedays(List<String> selectedCoursedays) { 
    this.selectedCoursedays = selectedCoursedays; 
} 

我試着用地圖,列表,但沒有一次成功。 setSelectedCoursedays永遠不會被調用。 如何聲明數組/列表/映射以獲取我的後臺bean中的值?

#{subscriptionBean.selectedCoursedays[cd1.sequenceNr]} 

沒有辦法。

回答

-1

這是c:forEachui:repeat之間的理解。 c:forEach將不會生成UI component tree nodes。首先,你必須參考它們之間的區別here

+0

謝謝,這實際上是原因。 –

+0

這個答案不正確。這不可能是原因。「不會構建UI組件樹節點」的解釋僅適用於「」,「」肯定會構建它們(「」只能呈現它們),但這絕對不是原因。 – BalusC

0

這個構造應該工作得很好。二傳手確實永遠不會被調用。 JSF/EL僅通過add(index, object)方法調用ArrayList本身的setter。即它基本上:

subscriptionBean.getSelectedCoursedays().add(cd1.sequenceNr, selectedItem); 

我不知道你如何觀察「它不工作」的具體問題。也許你發射了一個ajax請求,並在setter方法上放置了一個斷點,但沒有讀取服務器日誌。有兩種可能的情況,這種構造會失敗。

  1. 如果你不準備selectedCoursedaysnew ArrayList(),那麼你會得到PropertyNotFoundException: Target Unreachable, 'selectedCoursedays' returned null

  2. 如果你不與等量的null項目作爲課程天補selectedCoursedays,那麼你會得到一個ArrayIndexOutOfBoundsException

所以,你應該準備selectedCoursedays如下:

@PostConstruct 
public void init() { 
    selectedCoursedays = new ArrayList<String>(); 
    for (int i = 0; i < coursedays.size(); i++) { 
     selectedCoursedays.add(null); 
    } 
} 

更容易的選擇是使其成爲String[]

private String[] selectedCoursedays; 

@PostConstruct 
public void init() { 
    selectedCoursedays = new String[coursedays.size()]; 
} 
相關問題