2017-02-10 57 views
0

我有一個JSF頁面下面的單選按鈕定義:JSF 2 selectOneRadio不設定值豆

<h:selectOneRadio id="durationList" value="#{rentalEquipmentCheckoutController.selectedDuration}" styleClass="durationList"> 
<f:selectItems var="d" value="#{rentalEquipmentCheckoutController.durationList}" itemValue="#{d}" itemLabel="#{d.label}"> 
</f:selectItems> 
<f:converter converterId="durationConverter" /> 
<f:ajax /> 
</h:selectOneRadio> 

我有一個似乎是工作的罰款轉換器。我已經完成了它,它正在做它應該在獲取和設置上做的事情。

@Override 
public Object getAsObject(FacesContext context, UIComponent component, String durationHours) { 
    RentalDuration rentalDuration = DurationFactory.getDuration(Integer.parseInt(durationHours)); 
    return rentalDuration; 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object object) { 

    if (object != null) { 
     RentalDuration duration = (RentalDuration) object; 
     return Integer.toString(duration.getHours()); 
    } 

    return "Error"; 
} 

控制器是ManagedBean,它是視圖範圍。該列表在用戶界面上顯示效果良好,並且所有值似乎都可以在Google Web開發工具中使用。當我單擊其中一個單選按鈕時,轉換器的getAsObject會觸發並返回RentalDuration的正確實例。但bean中的setSelectedDuration方法永遠不會被調用。我試着用一個字符串列表設置一個簡單的實現,而且這似乎工作得很好(相同的頁面,bean等)。 setTestString方法被調用。我讀了@ BalusC的帖子,以至於我的眼睛流血不止,但我似乎無法弄清楚我做錯了什麼。

回答

0

呃。它似乎從未失敗;我可以在16小時內工作,在我發佈後,我發現發佈後的答案不會太長。問題是我用填充背景列表填充單選按鈕的對象與我試圖在轉換器中使用的對象不同。我正在嘗試在轉換器中創建新的Duration對象,並且我希望JSF的一些魔法能夠發現它們與列表中的一樣。一旦我將工廠設置爲返回相同的對象,則支持方法setSelectedDuration方法開始啓動。如果任何人都可以解釋這是如何在JSF的膽量中工作的,我很樂意聽到它。對象的比較,然後是所選對象的設置等。

+0

下一次未設置setter或action時,請先通過http://stackoverflow.com/q/2118656。 – BalusC