关于jsf:用户选择<p:datatable>的一行后如何显示对话框?

How to show a dialog after the user select a row of a <p:datatable>?

我有这个数据表:

1
2
3
4
5
6
7
8
9
10
<h:form id="form">
<p:dataTable id="tblInfo" var="ref" value="#{consultasBean.listaRefacciones}" paginator="true" rows="10" selectionMode="single" selection="#{consultasBean.refaccionSeleccionada}" rowKey="#{ref.idRefaccion}">
       <p:column headerText="Equipo">
          <h:outputText value="#{ref.equipo}" />
       </p:column>
       <p:column headerText="Marca">
          <h:outputText value="#{ref.marca}" />
       </p:column>
       //More colums here...
</p:dataTable>

我想在用户选择一行后显示这个对话框:

1
2
3
4
5
6
7
<p:dialog id="myDialog" widgetVar="refaccionDialog" header="Detalle Refaccion" resizable="false" width="300" showEffect="explode" hideEffect="explode">
     <h:panelGrid id="display" columns="2" cellpadding="4">
          <h:outputText value="Info:" />
          <h:outputText value="#{consultasBean.refaccionSeleccionada.equipo}" />
     </h:panelGrid>
     //More things here...
 </p:dialog>

这是我的 bean 的一部分(viewscoped):

1
2
3
private List<RefaccionBean> listaRefacciones = null;
private RefaccionBean refaccionSeleccionada = null;
// setters and getters...

listaRefacciones 已经有信息了,所以不用担心它是如何得到它的。

我知道我必须使用 p:ajax,但不知道如何使用。

我正在检查这个(示例 1 是我想要的),但信息太旧,现在不起作用。

请帮帮我。


只需在你的表中包含一个 p:ajax

1
<p:ajax event="rowSelect" oncomplete="PF('refaccionDialog').show()" update=":dialogId" />

希望这会有所帮助。


数据表的

rowKey 属性写错了。
它应该如下

1
  rowKey="#{ref.idRefaccion}"

数据表代码如下

1
2
3
4
5
6
7
8
9
10
11
   <h:form id="form">
   <p:dataTable id="tblInfo" var="ref" value="#{consultasBean.listaRefacciones}" paginator="true" rows="10" selectionMode="single"
      selection="#{consultasBean.refaccionSeleccionada}" rowKey="#{ref.idRefaccion}">
   <p:column headerText="Equipo">
      <h:outputText value="#{ref.equipo}" />
   </p:column>
   <p:column headerText="Marca">
      <h:outputText value="#{ref.marca}" />
   </p:column>
   //More colums here...
   </p:dataTable>