作者: 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}"
原因暂时还没研究出来,但是结果就是这样的了。