在rich:inplaceSelect 中使用布尔型的selectItem时碰到的问题

在rich:inplaceSelect 中使用布尔型的selectItem时碰到的问题
作者: 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}"

原因暂时还没研究出来,但是结果就是这样的了。

你可能感兴趣的:(在rich:inplaceSelect 中使用布尔型的selectItem时碰到的问题)