<p:selectOneMenu>
<f:selectItems value="beanproperty"/>
<p:column>
</p:column>
</p:selectOneMenu>
当你用到p:column来在selectOneMenu中创建列的时候,就会发现这个控件的column是不完善的,首先,beanproperty不能是字符串数组,比如
String[] str={"1","2"}
<p:selectOneMenu>
<f:selectItems value="class.str"/>
<p:column>
</p:column>
</p:selectOneMenu>
这样绑定之后,无法创建列,此其一
如果你绑定了List类型的变量,然后你这样指定格式
<p:selectOneMenu var="y">
<f:selectItems value="beanproperty" var="x" itemLabel=#{x.name} itemValue="#{x.name}"/>//name属性为字符串
<p:column>
#{y.name}
</p:column>
</p:selectOneMenu>
这样的代码,一样不生效,不会创建列,和没指定column一样
如果你这样指定
<p:selectOneMenu>
<f:selectItems value="beanproperty" var="x" itemLabel=#{x.name} itemValue="#{x}"/>//name属性为字符串
</p:selectOneMenu>
如果你这样指定,那么你会看到下拉列表显示的是每个变量的toString()返回值
<p:selectOneMenu var="y">
<f:selectItems value="beanproperty" var="x" itemLabel=#{x.name} itemValue="#{x}"/>//name属性为字符串
</p:selectOneMenu>
但是如果你这样指定,仅仅加个var="y",你会发现,下拉列表无法显示数据了,就是点了那个下拉按钮,下拉列表不会正确出现,就显示一条很小的白框框
<p:selectOneMenu var="y">
<f:selectItems value="beanproperty" var="x" itemLabel=#{x.name} itemValue="#{x}"/>//name属性为字符串
<p:column>
#{y.name}
</p:column>
</p:selectOneMenu>
但是如果你这样指定,才会出现你要的效果,列正确的被创建,但是,这一切仅仅是在火狐浏览器中。。。。。
如果你在IE下,就可能会出现错误,为什么说可能,是因为有时候正确,错误现象有,下拉列表偏离正确位置非常远,下拉列表非常宽,基本占据真个剩余空间
我认为,这是primefaces的一个BUG,目前primefaces5.1社区版,没有修正这个错误。
所以,如果需要用到下拉列表,那就别用column创建列了。