作者: sealyu 日期:2009-07-10
我們都知道,在<h:selectOneMenu>中使用布爾型selectItem時,itemValue為"true"/"false".例如:
<h:selectOneMenu value="#{controller.booleanPropertyX}">
<f:selectItem itemLabel="#{messages['xxxxx']}" itemValue="true"/>
<f:selectItem itemLabel="#{messages['xxxxx']}" itemValue="false"/>
</h:selectOneMenu>
這樣是沒有問題的。
但是如果你使用<rich:inplaceSelect>來實現選擇功能的時候,"true"/"false"就不起作用了,例如:
<rich:inplaceSelect minSelectWidth="80" editClass="inlineSelectEdit"
defaultLabel="-Select-" immediate="true"
value="#{controller.booleanPropertyX}">
<f:selectItem itemLabel="#{messages['xxxxx']}" itemValue="true"/>
<f:selectItem itemLabel="#{messages['xxxxx']}" itemValue="false"/>
</rich:inplaceSelect>
這時候即使sfsb中的值booleanPropertyX是"true"/"false",也不會有selectItem被選中,而且如果你選擇一個selectItem,還會報錯:IllegalArgumentException.說明selectItem的itemValue跟#{controller.booleanPropertyX}的值是不匹配的。
后來我將"true"/"false"改為"0"/"1", 還是不起作用。
Finally,終于試出了正確的方法:使用"#{true}"/"#{false}". 正確的使用方法:
<rich:inplaceSelect minSelectWidth="80" editClass="inlineSelectEdit"
defaultLabel="-Select-" immediate="true"
value="#{controller.booleanPropertyX}">
<f:selectItem itemLabel="#{messages['xxxxx']}" itemValue="#{true}"/>
<f:selectItem itemLabel="#{messages['xxxxx']}" itemValue="#{false}"/>
</rich:inplaceSelect>
也就是說:
(1)。如果你使用<h:selectOneMenu>,那么你的f:selectItem的itemValue應該使用:"true"/"false"
(2)。如果你使用<rich:inplaceSelect>,那么你的f:selectItem的itemValue應該使用:"#{true}"/"#{false}"
原因暫時還沒研究出來,但是結果就是這樣的了。