【发布时间】:2020-02-07 21:05:25
【问题描述】:
我有一个使用 Primefaces 构建的数据表。它包含一个 "Person" 列表。 “Person”是一个只有 1 个 String 属性的 Java 类 - “name”,有没有参数的构造函数,有 1 个 String 参数的构造函数,“name”的 getter 和 setter。表的第一列包含人名。第二列包含一个命令按钮。通过按下它,打开一个对话框。在此对话框中,我想查看所选人员的姓名。 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
}
因此,如果我按下用户“Mary”的“详细信息”按钮,则会打开一个对话框,我希望在该对话框中看到“选定的人是 Mary”消息。问题是无论我在哪一行按下“详细信息”按钮,对话框内的消息都是“选定的人是詹姆斯”。 “詹姆斯”是列表中的最后一个人。
【问题讨论】:
-
对于 n 个人,您将获得 n 个呈现的对话框,每个对话框具有 wiedgetVar
personDetails。显然最后一个赢了。 WidgetVars 在呈现的 HTML 文档中必须是唯一的。 -
而且您根本没有使用数据表的选择机制。您的标题和文字表明您正在努力实现这一目标:primefaces.org/showcase/ui/data/datatable/selection.xhtml
-
1:将对话框放在数据表之外,2:这是 widgetvar 中其他问题的重复,不是唯一的,最后一个在这里获胜。让我找到重复的
标签: jsf primefaces datatable