我有一个用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
}
因此,如果我按下用户“玛丽”的“详细信息”按钮,则会打开一个对话框,在该对话框中,我希望看到消息“选定的人是玛丽”。问题是无论我按“详细信息”按钮的行是什么,对话框中的消息都是“选定的人是詹姆斯”。 “詹姆斯”是列表中的最后一个人。
personView.selectedPerson
)。personView.selectedPerson
变量设置pers
:<f:setPropertyActionListener target="#{personView.selectedPerson}" value="#{pers}"/>
并更新对话框内容。