2012-07-10 106 views
0

我想用SelectOneRadio做一些瘋狂的分組,所以我決定創建自己的自定義組件,允許我指定<input>標籤的name屬性(如您所知,同樣的name表示單選按鈕位於同一組中) 。渲染是正確的,所以我有一個<input>是用來渲染這樣爲什麼h:selectOneRadio沒有「name」屬性?

<input name="myForm:test1" id="myForm:test1:0" value="0" type="radio"> 

現在呈現這樣

<input name="foo" id="myForm:test1:0" value="0" type="radio"> 

然而,EL停止工作,當我提交表單(同爲H:的commandButton和p:commandButton)。所以,如果我有這樣的

<xxx:selectOneRadio id="test1" value="#{myBean.selectedFood}"> 

然後EL工作,selectedFood打印出來的修正值,但是如果我把

<xxx:selectOneRadio id="test1" value="#{myBean.selectedFood}" groupId="foo"> 

這將使得在<input>標籤name=foo。然後EL綁定停止工作。 selectedFoodnull

更有趣的是,如果我把這個

<xxx:selectOneRadio id="test1" value="#{myBean.selectedFood}" groupId="myForm:test1"> 

myForm:test1是正確的客戶端ID,則EL再結合工作,所以它看起來並不像它是我的代碼,使綁定停止工作。 JSF是否需要將input標記的name屬性添加到客戶端ID?

回答

2

name成爲HTTP請求參數名稱,這必須用於收集提交的HTTP請求參數值。這默認爲JSF組件客戶端ID,收集發生在Renderer(或UIComponent本身)的decode()方法中。您需要重寫/實現Rendererdecode()以更改請求參數值的方式。

+0

我越想它,這似乎不像一個好的設計sighhh回到方形1 – 2012-07-10 14:37:14

相關問題