【发布时间】:2012-07-09 13:36:54
【问题描述】:
我正在使用 Primefaces SelectOneMenu (http://www.primefaces.org/showcase-labs/ui/selectOneMenu.jsf) 和演示中描述的“自定义内容”版本。
问题在于,只有绑定到下拉字段的字段的实际值是用作value 的对象类型时,这些列才有效。
以下工作(如果Bean.field 是SelectObject 类型):
<p:selectOneMenu value="#{bean.field}"
var="x">
<f:selectItems
value="#{valuesBean.getSelectItems()}" var="bt"
itemLabel="#{bt.label}" itemValue="#{bt}" />
<p:column>
<h:outputText
value="#{x.value}" />
</p:column>
<p:column>
<h:outputText value="xyz" />
</p:column>
</p:selectOneMenu>
以下内容不起作用(String 类型的Bean.field):
<p:selectOneMenu value="#{bean.field}"
var="x">
<f:selectItems
value="#{valuesBean.getSelectItems()}" var="bt"
itemLabel="#{bt.label}" itemValue="#{bt.value}" />
<p:column>
<h:outputText
value="#{x.value}" />
</p:column>
<p:column>
<h:outputText value="xyz" />
</p:column>
</p:selectOneMenu>
在第一个版本中,xyz 显示为第二列,而在第二个版本中则不是。我遇到的问题是,现在我需要在数据库中保存SelectObject 类型的对象,尽管我也可以将value 字段的字符串保存在那里。
有什么好的方法来处理这个问题吗?
【问题讨论】:
-
尝试将 bean.field 的 getter/setter 设为 Object 类型,例如setField(Object value), Object getField()
-
这与
Bean是 JPA 实体以及String类型反映在相应的数据库列中这一事实相冲突。 -
我通过使用实际对象作为
bean.field的类型解决了这个问题。但是我不再将其序列化,而是使用@OneToOne。这行得通,尽管现在我遇到了许多条目填满我的“项目”表的问题。无论如何,现在可以“关闭”了。
标签: jsf primefaces selectonemenu