为什么在点击p:dataTable的一行之前,p:poll不会启动?

时间:2014-07-16 13:28:36

标签: jsf primefaces

我有p:poll更新p:dataTable,但问题是在点击p:dataTable的行之前不会开始更新。当页面加载没有任何事情发生,直到我点击一行,之后一切正常。

我已阅读p:poll并默认拥有autostart="true"

这是我的p:poll

<p:poll interval="5" listener="#{adminUsuarios.actualizarLista()}" update="tblUsuarios" />

这是我的p:dataTable

<p:dataTable id="tblUsuarios" var="us" value="#{adminUsuarios.listaUsuarios}" paginator="true" rows="50"  paginatorPosition="both" selectionMode="single" selection="#{adminUsuarios.usuarioSeleccionado}" rowKey="#{us.id_User}">
    <p:ajax event="rowSelect" oncomplete="PF('editarDialog').show()" update=":myForm:myDialog" />
    <p:column headerText="Usuario">
        <h:outputText value="#{us.id_User}" />
    </p:column>
    <p:column headerText="Nombre">
        <h:outputText value="#{us.nameU}" />
    </p:column>
</p:dataTable>

当点击表格的一行时,我会显示一个对话框。我认为问题可能出在这个问题上。一切都在同一个h:form,只有在点击p:poll

的一行后才有效(p:datatable

这是我的p:dialog

<p:dialog id="myDialog" widgetVar="editarDialog" header="Editar perfil de usuario #{adminUsuarios.usuarioSeleccionado.id_User}" resizable="false" width="400" showEffect="size" hideEffect="size">
    <h:panelGrid columns="2" cellpadding="4" style="margin: 0 auto;">
        <h:outputText value="Perfil" />
        <p:selectOneMenu id="cboPerfil" value="#{adminUsuarios.usuarioSeleccionado.nivelAlmacen}" >
            <f:selectItem itemLabel="..." itemValue="0" />
            <f:selectItem itemLabel="2" itemValue="2" />
            <f:selectItem itemLabel="1" itemValue="1" />
        </p:selectOneMenu>

    </h:panelGrid>
</p:dialog>

显示的一切都是我的代码中的顺序。

1 个答案:

答案 0 :(得分:0)

这是因为您的对话框不是动态的,并且在页面加载时获取它的内容。 此时未进行任何选择,属性#{adminUsuarios.usuarioSeleccionado}为空。那会导致PropertyNotFoundException。 您可以在页面加载之前设置p:dialog componet dynamic attribute true或init usuarioSeleccionado变量(例如在bean构造函数中)。