Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks
作者: 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}"

原因暂时还没研究出来,但是结果就是这样的了。
posted on 2009-07-10 17:13 seal 阅读(944) 评论(0)  编辑  收藏 所属分类: Seam

只有注册用户登录后才能发表评论。


网站导航: