Cómo mostrar detalles de la fila actual de p: dataTable en un p: cuadro de diálogo y actualizar después de guardar

Tengo una aplicación JSF 2 que tiene dos páginas, una para enumerar estudiantes y otra para mostrar detalles de un estudiante determinado. La página de listado tiene un enlace a la página de detalles en cada fila de la tabla de estudiantes, que abre una nueva pestaña en el navegador para mostrar esos detalles, cuando se hace clic.

Ahora los requisitos cambiaron a no mostrar más detalles en una nueva pestaña, sino en un diálogo modal en la página de listado.

Mi idea es simplemente insertar el contenido de la página de detalles en el cuadro de diálogo modal para que la página de listado no sea demasiado grande y difícil de mantener. Aquí comienzan mis dudas. Después de investigar un poco, cambié el enlace en cada fila de la lista al siguiente botón:

<p:commandButton value="Details" type="button"
                 onclick="PF('dialog-details').show()">
</p:commandButton>

El diálogo se declara de la siguiente manera:

<p:dialog widgetVar="dialog-details" header="Details" modal="true" width="95%">
    <ui:include src="student_details.xhtml">
        <ui:param name="id" value="#{student.id}"/>
    </ui:include>
</p:dialog>

Finalmente, la página de detalles fue cambiada para ser algo como esto:

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <f:metadata>
        <f:viewParam name="id" value="#{studentBean.id}" />
    </f:metadata>

    <h1 class="title ui-widget-header ui-corner-all">Details of #{studentBean.bean.name} / #{studentBean.bean.number}</h1>
</ui:composition>                       

Cuando hago clic en el botón, el cuadro de diálogo realmente se muestra y el contenido es la página de detalles. Veo el siguiente contenido en el cuadro de diálogo:

Details of  / 

No hay errores en absoluto, pero los datos que deberían mostrarse no lo son. Se estableció un punto de interrupción enStudentBean.setId() (este método carga una propiedad llamadabean con elStudent instancia correspondiente a la identificación pasada) pero nunca se golpea.

Después de pensarlo un tiempo, llegué a comprender por qué no funciona. El parámetro pasado a la página de detalles esstudent.id, perostudent es el nombre usado comovar en el<p:datatable/> que muestra a todos los estudiantes, entoncesstudent no es válido en<p:dialog/> que está fuera del<p:datatable/>.

Entonces, lo que necesito es una forma de mostrar el diálogo utilizando la identificación del alumno correspondiente en una fila determinada. Idealmente, me gustaría una llamada ajax aquí, para que los detalles se carguen solo cuando sea necesario.

¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta