我需要創建一個帶有JSF 2.0(不是複合組件)的自定義組件,該組件與SelectManyCheckbox類似,但具有不同的UI。我嘗試通過繼承UISelectMany並創建一個新的自定義Renderer來實現此目的。繼承UISelectMany以創建自定義JSF組件
我不明白的是,客戶端上的輸入數據如何通過組件傳遞到Bean中。必須有一種方法可以從POST中收集http params,將它放入List中並將List設置在Bean中。
編輯
我已經嘗試過與此類似:
public void decode(FacesContext context, UIComponent component) {
if ((context == null) || (component == null)) {
throw new NullPointerException();
}
MapComponent map = (MapComponent) component;
String key = getName(context, map);
String value = (String)context.getExternalContext().
getRequestParameterMap().get(key);
if (value != null)
map.setCurrent(value);
}
}
我可以在調試器中看到的,我的HTTP-PARAMS正確獲取。我也可以看到,我的自定義轉換器將在此之後被調用。但是價值觀並沒有達到比恩。但是我可以在日誌中看到一個非特定的驗證錯誤。 在網上閱讀了一些教程後,我仍然不明白這是如何工作的。必須有一些膠水代碼,它將轉換後的值傳遞給Bean中的setter。有人知道這是如何工作的嗎?
感謝 月
感謝您的提示!我認爲驗證可能是問題。我實現了一個decode()和getConvertedValue(),我可以在調試模式中看到它們被調用。但在此之後,我在日誌中看到驗證錯誤。我沒有發現爲什麼會出現此錯誤...或驗證是如何工作的...... – treeno 2012-01-06 20:32:43
驗證錯誤的消息是什麼?臭名昭着的「價值無效」? – BalusC 2012-01-06 20:35:42
是的,確切地說......我正在做一些很好的認識錯誤? ;-)也許UISelectMany檢查是否所有選定的值都是從中選擇值的完整值列表的一部分。但目前我只有選定的值。我無法在jsf源文件中看到發生這種情況的原因。 – treeno 2012-01-07 20:57:27