p:dataTable中未正确返回所选行

问题描述 投票:0回答:1

我有一个用Primefaces构建的数据表。它包含“人员”列表。 “ Person”是一个Java类,仅具有1个String属性-“ name”,具有不带参数的构造函数,具有1个String参数的构造函数,“ name”的getter和setter。该表的第一列包含人员姓名。第二列包含一个commandButton。按下它会打开一个对话框。在此对话框中,我想查看所选人员的姓名。JSF页面是这样的:

<h:form id="personForm" prependId="false">
<p:dataTable id="personEntitiesTable" var="pers" value="#{personView.persons}">
    <p:column headerText="Name">
        <h:outputText value="#{pers.name}" />
    </p:column>          
    <p:column headerText="">             
        <p:commandButton value="Details" type="button" onclick="PF('personDetails').show();" />
        <p:dialog header="Person details" widgetVar="personDetails" modal="true" height="150" >     
            Selected person is "#{pers.name}"
        </p:dialog>
    </p:column>
</p:dataTable>
</h:form>

该表的managedBean是:

@ManagedBean
@ViewScoped
public classPersonView implements Serializable {
    private List<Person> persons;

    @PostConstruct
    public void init() {
        persons = new ArrayList<Person>();
        persons.add(new Person("John"));
        persons.add(new Person("Mary"));
        persons.add(new Person("James"));
    }

    // getters and setters
}

因此,如果我按下用户“玛丽”的“详细信息”按钮,则会打开一个对话框,在该对话框中,我希望看到消息“选定的人是玛丽”。问题是无论我按“详细信息”按钮的行是什么,对话框中的消息都是“选定的人是詹姆斯”。 “詹姆斯”是列表中的最后一个人。

jsf primefaces datatable
1个回答
0
投票
  1. 将对话框置于数据表之外。
  2. 您的对话框必须使用托管bean属性(personView.selectedPerson)。
  3. Details按钮必须使用personView.selectedPerson变量设置pers<f:setPropertyActionListener target="#{personView.selectedPerson}" value="#{pers}"/>并更新对话框内容。
© www.soinside.com 2019 - 2024. All rights reserved.