PrimeFaces TypeError: PF(…) no está definido

He seguido el DataTable Filtro escaparate de PrimeFaces en mi propia tabla de datos. Cada vez que el “onkeyup” se produce el evento tengo un

TypeError: PF(…) no está definido de error en Firebug y un “Uncaught
TypeError: No se puede leer la propiedad ‘filtro’ undefined

en Cromo de la Consola. El filtrado no funciona.

Aquí está mi página XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <h:title>List of User</h:title>
    </h:head>

    <h:body>
        <h:form id="UserForm" name="UserRecords">
            <p:dataTable id="users" widgetVar="usersTable" var="user" value="#{userBean.users}" scrollable="false" frozenColumns="0" sortMode="multiple" stickyHeader="true" filteredValue="#{userBean.filteredUsers}">
                <f:facet name="header">User<p:inputText id="globalFilter" onkeyup="PF('usersTable').filter()" style="float:right" placeholder="Filter"/>
                    <p:commandButton id="toggler" type="button" style="float:right" value="Columns" icon="ui-icon-calculator"/>
                    <p:columnToggler datasource="users" trigger="toggler"/>
                    <p:commandButton id="optionsButton" value="Options" type="button" style="float:right"/>
                    <p:menu overlay="true" trigger="optionsButton" my="left top" at="left bottom">
                        <p:submenu label="Export">
                            <p:menuitem value="XLS">
                                <p:dataExporter type="xls" target="users" fileName="users"/>
                            </p:menuitem>
                            <p:menuitem value="PDF">
                                <p:dataExporter type="pdf" target="users" fileName="users"/>
                            </p:menuitem>
                            <p:menuitem value="CSV">
                                <p:dataExporter type="csv" target="users" fileName="users"/>
                            </p:menuitem>
                            <p:menuitem value="XML">
                                <p:dataExporter type="xml" target="users" fileName="users"/>
                            </p:menuitem>
                        </p:submenu>
                    </p:menu>
                </f:facet>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.firstName}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="FirstName" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.firstName}"/>
                </p:column>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.lastName}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="LastName" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.lastName}"/>
                </p:column>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.username}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="Username" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.username}"/>
                </p:column>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.password}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="Password" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.password}"/>
                </p:column>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.id}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="Id" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.id}"/>
                </p:column>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.createdOn}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="CreatedOn" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.createdOn}"/>
                </p:column>
                <p:column disabledSection="false" colspan="1" exportable="true" filterBy="#{user.lastModified}" filterMatchMode="startsWith" filterStyle="display:none; visibility:hidden;" filterable="true" headerText="LastModified" priority="0" rendered="true" resizable="true" rowspan="1" selectRow="true" sortable="true" toggleable="true" visible="true">
                    <h:outputText value="#{user.lastModified}"/>
                </p:column>
            </p:dataTable>
        </h:form>
    </h:body>
</html>

Estoy utilizando PrimeFaces 5.2 con Mojarra 2.2.8 y JSF 2.2.10.

Buscar en el código HTML generado de salida. Los guiones que están presentes en la <head>? Al menos, la mezcla de Mojarra 2.2.8 con 2.2.10 no sugieren que su tiempo de ejecución classpath es todo limpio y libre de conflictos. Está usted absolutamente seguro de que usted no también la mezcla de múltiples PrimeFaces versiones? Que sería una causa probable.
Gracias, después de tomar una mirada más cercana en el desplegado Primefaces versiones, reconocí que la 5.1 y 5.2 se desplegaron en paralelo por alguna extraña circunstancia. La eliminación de 5.1 resuelto el problema.

OriginalEl autor Sebastian Lang | 2015-05-19

3 respuestas

  1. 3

    Que puede suceder cuando el tiempo de ejecución de ésta está sucia de duplicar las diferentes versiones de las bibliotecas. Los conflictos sería entonces se producen durante la carga de clases y la resolución de los recursos.

    Asegúrese de que está utilizando sólo una versión de una biblioteca. Esto no sólo se aplica a PrimeFaces, pero también a la Mojarra. Tener tanto 2.2.8 y 2.2.10 definitivamente no es de derecha.

    OriginalEl autor BalusC

  2. 9

    En mi caso, me encontré con que mi TypeError: PF(...) is undefined error fue causado por Primefaces no se a podido encontrar el widget widgetVar="usersTable" por ejemplo debido a un error de ortografía

    En este caso, la salida de la consola a la derecha por encima de la de error en Firebug le da la explicación Widget for var 'editExecContactDialogg' not available!

    OriginalEl autor hendinas

  3. 1

    Como @hendinas respuesta, esta no es la solución para el problema en particular, pero podrían ser útiles para el futuro de los Empleados que tienen exactamente el mismo error pero con una causa diferente.

    Este es un caso de @hendinas respuesta, pero donde la cosa se está refiriendo a que no se encuentra porque no tiene el mismo rendered condiciones. Aquí es un ejemplo.

    <ui:repeat id="extSyses" var="extSys" value="${cc.attrs.externalSystems}"
            varStatus="extSysLoop">
        <h:commandButton
            id="YesButton" value="Yes" type="button"
            rendered='#{(rptBean.canEditReport or rptBean.canAnnotateReport) and not extSys.closed)}'
            onclick="PF('#{cc.attrs.prefix}yesDlg#{extSysLoop.index}').show()" />
    
        <p:dialog id="extDocDlg" header='Enter document reference number'
            rendered='#{rptBean.canEditReport and not extSys.closed)}'
            widgetVar="#{cc.attrs.prefix}yesDlg#{extSysLoop.index}"
            width="650" minWidth="650" modal="true">
           ... Dialog Content ...
        </p:dialog>
    </ui:repeat>

    En este caso, el widgetVar coincidía con el valor de onclick, así que estaba bien. Sin embargo, la rendered cláusula difieren. Si canEditReport era cierto, entonces todo funcionaba bien. Sin embargo, si canAnnotateReport era cierto, entonces el botón de mostrar, pero no tendría ningún cuadro de diálogo para mostrar! Cuando se pulsa el botón, el TypeError: PF(…) is undefined mensaje se muestra.

    En este ejemplo, la solución es hacer que el rendered cláusulas de la misma para ambos el botón y el cuadro de diálogo que se refiere.

    OriginalEl autor Pixelstix

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *