一个人只能拥有一辆汽车,但在数据表中我想显示列表中的所有汽车,但选择一个用户所属的人。这样用户就可以即时更新任何人的汽车。
假设我有两个 table
人
id
name
car_id
汽车
id
name
理想情况下,person
应该将 Cars
id 作为 primary
键,但事实并非如此。所以每个人都有车,对吧。
现在我正在数据表中显示人
列表,例如
------------------------------------
Name | Car
----------------------------------------
ABC | 1
DDD | 2
但我想显示为:
------------------------------------
Name | Car
----------------------------------------
ABC | Toyota
DDD | Ford
现有代码:
<p:dataTable value="#{test.persons} var="person">
<p:column headerText="Name">
#{person.name}
</p:column>
<p:column headerText="Name">
#{person.carID}
</p:column>
</p:dataTable>
但我想做这样的事情:
<p:dataTable value="#{test.persons} var="person">
<p:column headerText="Name">
#{person.name}
</p:column>
<p:column headerText="Car">
<p:selectOneMenu value="#{test.selectedCar}"
converter="entityConverter">
<f:selectItems value="#{spMBean.cars}" var="car"
itemLabel="#{car.name}" itemValue="#{car}" />
</p:selectOneMenu>
</p:column>
</p:dataTable>
如果有人可以帮助我解决这个问题,我将非常感激。
最佳答案
您想要将所选汽车与个人相关联。
但是,您将下拉值绑定(bind)到通用支持 bean 属性而不是个人。同一数据表中所有行中的所有下拉菜单现在都指向同一个支持 bean 属性。提交后,每行的选定值将相互覆盖,直到支持 bean 属性以最后一行的选定值结束。
这没有道理。您需要将下拉值绑定(bind)到个人。
<p:selectOneMenu value="#{person.car}">
如果 Person
实体具有 private Car car
属性而不是 private Long carID
,则这是最简单的。当然,您可以将可用项目保存在单独的 bean 中。
关于JSF Primefaces SelectOneMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146896/