JSF Primefaces SelectOneMenu

标签 jsf primefaces datatable selectonemenu

一个人只能拥有一辆汽车,但在数据表中我想显示列表中的所有汽车,但选择一个用户所属的人。这样用户就可以即时更新任何人的汽车。

假设我有两个 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/

相关文章:

html - Primefaces p :calendar inside overlaypanel

jsf - p :commandButton does not fire action

重新显示同一页面时 JSF 2 : ViewScoped Problem, bean 未持久化

jsf - 在 inputText 中按 Enter 后执行命令

c# - DataTable排序时如何区分大小写?

c# - 在 C# MySQL 语句中使用 LEFT() 使用 OdbcDataAdapter 填充 DataTable 时出错

java - 单个网页支持多语言

css - JSF2/Primefaces 布局性能

jsf-2 - Primefaces 4.0 p :selectOneMenu valueChangeListener

javascript - 如何使用复选框动态显示/隐藏列