Aritz
Aritz

Reputation: 31651

Primefaces 3.4.2 javascript error

I'm developing a web application using the 3.4.2 version of Primefaces. I have a p:pickList on it. Application is working using a general template and each page replaces the general_content of the template, which is being reloaded for every request. My problem is that the picklist is not working (cannot interact with it) because some JavaScript error happens when I load the page. This is my xhtml:

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

<ui:define name="metadata">
    <f:metadata>
        <f:viewParam id="user" name="user"
            value="#{navegableUserData._ParamUser}" />

        <f:viewParam id="NavIndex" name="NavIndex"
            value="#{navegableUserData._QueueIndex}" />
        <f:event type="preRenderView"
            listener="#{navegableUserData.initialize}" />
    </f:metadata>
    <h:message for="user" />
</ui:define>

<ui:define name="general_content">
    <h:form id="SystemUserForm">
        <p:pickList id="rolePickList" value="#{navegableUserData._ListRoles}"
            var="role" itemValue="#{role}" converter="rolConverter">
            <f:facet name="sourceCaption">
                <h:outputText value="#{msg.AVAILABLE}" />
            </f:facet>
            <f:facet name="targetCaption">
                <h:outputText value="#{msg.ASSIGNED}" />
            </f:facet>

            <p:column>
                <h:outputText value="#{role._Nombre}" />
            </p:column>
        </p:pickList>
    </h:form>
</ui:define>

This is the JavaScript error I have:

Firebug in Firefox

Firebug is telling me the element 'a' cannot be found in the first line of primefaces.js

"a is undefined"
PrimeFaces={escapeClientId:function(a){return"#"+a.replace(/:/g,"\\:")},
...

Inspector in Chrome

Uncaught TypeError: Cannot call method 'replace' of undefined primefaces.js.xhtml:1
PrimeFaces.escapeHTML primefaces.js.xhtml:1
(anonymous function) primefaces.js.xhtml:27
bG.extend.each jquery.js.xhtml:14
bG.fn.bG.each jquery.js.xhtml:14
PrimeFaces.widget.PickList.PrimeFaces.widget.BaseWidget.extend.generateItems primefaces.js.xhtml:27
PrimeFaces.widget.PickList.PrimeFaces.widget.BaseWidget.extend.init  primefaces.js.xhtml:27
e.(anonymous function) jquery.js.xhtml:373
c jquery.js.xhtml:373
PrimeFaces.createWidget primefaces.js.xhtml:1
PrimeFaces.cw primefaces.js.xhtml:1
(anonymous function)

It looks like some jquery is failing. With the previous version of Prime, 3.4.1, everything is working fine.

Upvotes: 0

Views: 3011

Answers (1)

n00bot
n00bot

Reputation: 229

p:pickList (primefaces v3.4.2) requires itemLabel to be specified.

Just add

itemLabel="#{role}"

to your p:pickList

Upvotes: 3

Related Questions