Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > PrimeFaces 3.5 Problema con p:menu y p:dataTable

Muy buenas,
Tengo un problema con los componentes menú y dataTable de primefaces 3.5. Para analizar el problema me he creado una aplicación de ejemplo que contiene una plantilla y dos paginas. La plantilla es la siguiente:

<f:view contentType="text/html">
<h:head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</h:head>
<h:body>
<p:layout fullPage="true">

<p:layoutUnit position="west" resizable="false" closable="false" collapsible="false" size="auto">
<h:form>
<p:menu>
<p:menuitem value="Descarga Archivo" action="download"/>
<p:menuitem value="Tabla Editable" action="edit"/>
</p:menu>
</h:form>
</p:layoutUnit>

<p:layoutUnit resizable="false" closable="false" collapsible="false" position="center">
<ui:insert name="content" />
</p:layoutUnit>

</p:layout>

</h:body>
</f:view>

Una de las páginas es una tabla con datos editables de tal forma que al seleccionar un elemento se pueden editar sus datos. El código es el siguiente:
<ui:composition template="/template.xhtml" >

<ui:define name="content">

<h:form id="form">

<!-- PRUEBA DE TABLA CON SELECCION Y FORMULARIO DE EDICION-->
<p:panel header="Tabla Editable">
<p:dataTable id="editTable" var="edit" value="#{controller.list}" selection="#{controller.selectedEdit}"
selectionMode="single" rowKey="#{edit.name}"
paginator="true" rows="5" paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15">

<p:ajax event="rowSelect" update=":form:editPanel" oncomplete="editPanel_wv.show();" />

<p:column>
<f:facet name="header">
<h:outputText value="Nombre" />
</f:facet>
<h:outputText value="#{edit.name}" />
</p:column>

<p:column>
<f:facet name="header">
<h:outputText value="Tipo" />
</f:facet>
<h:outputText value="#{edit.type}" />
</p:column>

</p:dataTable>

<p:panel header="Editando" id="editPanel" widgetVar="editPanel_wv" visible="false" closable="true">
<p:messages/>
<h:panelGrid cellpadding="5">
<p:row>
<p:column>
<p:outputLabel for="name" value="Nombre" />
</p:column>

<p:column>
<p:inputText id="name" value="#{controller.selectedEdit.name}"/>
</p:column>

<p:column>
<p:outputLabel for="type" value="Tipo" />
</p:column>

<p:column>
<p:inputText id="type" value="#{controller.selectedEdit.type}"/>
</p:column>
</p:row>

</h:panelGrid>
</p:panel>

</p:panel>

</h:form>

</ui:define>
</ui:composition>

He puesto una linea para que se imprima en consola cada vez que se selecciona un elemento de la tabla:
public void setSelectedEdit(Editable selectedEdit) {
this.selectedEdit = selectedEdit;
System.out.println("Select Edit " + selectedEdit.getName());
}

Con este escenario realiza los siguiente operación:
- Accedo a la pagina de edición de datos / Selecciono un elemento de la tabla / Comprueba que se pinta en consola los datos del elemento seleccionado
- Accedo al otro menu que muestra una página diferente y vuelvo a realizar la operación anterior, pero esta vez comprueba que los datos del elemento seleccionad se imprimen dos veces.
Si repito todos el proceso nuevamente comprueba que los datos del elemento seleccionado se imprimen tres veces, y así cada vez que repito la operación se aumenta en uno las veces que se imprimen los datos del elemento seleccionado.

He estado buscando si alguien ha tenido el mismo error pero no he encontrado nada al respecto. ¿Alguien tienen alguna idea de por qué pasa esto?

PD: Si añado a cada menuitem ajax="false" se soluciona pero mi intención con este post es conocer el "por qué" sucede este fenómeno al usar ajax. Gracias.

noviembre 20, 2013 | Registered Commenterjosmarpav