Guest Guest
Guest Guest

Reputation: 421

Cannot find component with identifier JSF

When I would like to run jsf page, I got this erreur

javax.faces.FacesException: Cannot find component with identifier ":form1:display" referenced from "form1:formateur".

This is JSF PAGE(index.xhtml) JSF + primefaces netbeans

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Gestion de réservation pour une formation</title>
    </h:head>
    <script type="text/javascript">  
    function handleSubmitRequest(xhr, status, args, dialogName, formName) {  
            dialog = jQuery('#'+dialogName);
        if(args.validationFailed) {  
            dialog.effect("shake", { times:3 }, 100);  
        } else {
            clearForm(formName);
            ; 
            formateurDialog.hide(); 
        }  
    }
    function clearForm(formName){
        jQuery('#'+formName).each(function(){
            this.reset();
    });
    }
</script>
    <h:body>
        <p:layout fullPage="true">
            <p:layoutUnit position="north" size="150">
                <center>  <h1>Gestion de réservation pour une formation</h1></center>
            </p:layoutUnit>
            <p:layoutUnit position="west" size="200"  rendered="true" collapsible="true" resizable="true" closable="true" header="menu">
                <h:form>
                    <p:commandLink value="Nouveau formateur" actionListener="#{formateurController.preparerajouterFormateur(actionEvent)}" onclick="dlgFormateur.show();" />
                </h:form>
            </p:layoutUnit>
            <p:layoutUnit position="center">

                    <p:dialog widgetVar="dlgFormateur" resizable="false"  height="400" width="450" header="Ajout formateur" position="center">
                <h:form id="newFormateurForm">
                    <p:panelGrid columns="2">
                        <h:outputText value="nom"/>
                        <p:inputText id="adresse2" value="#{formateurController.formateurs.adresse}"/>

                        <h:outputText value="cin"/>
                        <p:inputText id="cin2" value="#{formateurController.formateurs.cin}"/>

                        <h:outputText value="email"/>
                        <p:inputText id="email2" value="#{formateurController.formateurs.email}"/>

                        <h:outputText value="nom"/>
                        <p:inputText id="nom2" value="#{formateurController.formateurs.nom}"/>

                        <h:outputText value="prenom"/>
                        <p:inputText id="prenom2" value="#{formateurController.formateurs.prenom}"/>

                        <h:outputText value="pseudo"/>
                        <p:inputText id="pseudo2" value="#{formateurController.formateurs.pseudo}"/>

                        <h:outputText value="sexe"/>
                        <p:inputText id="sexe2" value="#{formateurController.formateurs.sexe}"/>

                        <h:outputText value="telephone"/>
                        <p:inputText id="telephone2" value="#{formateurController.formateurs.telephone}"/>

                        <p:commandButton value="enregistrer" id="eng" actionListener="#{formateurController.ajouter(actionEvent)}" update=":form1:formateur" oncomplete="dlgFormateur.hide()"/>

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

                <h:form id="form1">    
                    <p:dataTable id="formateur" value="#{formateurController.listFormateurs}" var="formateur" rowKey="#{formateur.formateurId}" paginator="true" rows="10" selection="#{formateurController.selectedFormateur}" selectionMode="single" filteredValue="#{formateurController.filteredFormateurs}" rowsPerPageTemplate="5,10,20,30">
                        <p:ajax event="rowSelect" update=":form1:display" oncomplete="formateurDialog.show()" />  
                        <f:facet name="header">  
                            List of Formateurs  
                        </f:facet> 

                        <p:column headerText="Id" sortBy="#{formateur.formateurId}" filterBy="#{formateur.formateurId}" id="id_formateur">  
                            #{formateur.formateurId}  

                            <p:commandLink value="#{formateur.formateurId}" update=":formateurDetailForm:display1" oncomplete="formateurDialog.show()"  title="View">
                                <f:setPropertyActionListener value="#{formateur}" target="#{formateurController.selectedFormateur}" />    
                            </p:commandLink>
                        </p:column>  

                        <p:column headerText="Adresse" sortBy="#{formateur.adresse}" filterBy="#{formateur.adresse}" id="adresse">  
                            #{formateur.adresse}  
                        </p:column>  

                        <p:column headerText="CIN" sortBy="#{formateur.cin}" filterBy="#{formateur.cin}" id="cin">  
                            #{formateur.cin}  
                        </p:column>  

                        <p:column headerText="Email" sortBy="#{formateur.email}" filterBy="#{formateur.email}" id="email">  
                            #{formateur.email}  
                        </p:column> 
                        <p:column headerText="Nom" sortBy="#{formateur.nom}" filterBy="#{formateur.nom}" id="nom">  
                            #{formateur.nom}  
                        </p:column>
                        <p:column headerText="Prenom" sortBy="#{formateur.prenom}" filterBy="#{formateur.prenom}" id="prenom">  
                            #{formateur.prenom}  
                        </p:column>
                        <p:column headerText="Pseudo" sortBy="#{formateur.pseudo}" filterBy="#{formateur.pseudo}" id="pseudo">  
                            #{formateur.pseudo}  
                        </p:column>
                        <p:column headerText="Sexe" sortBy="#{formateur.sexe}" filterBy="#{formateur.sexe}" id="sexe">  
                            #{formateur.sexe}  
                        </p:column>
                        <p:column headerText="Telephone" sortBy="#{formateur.telephone}" filterBy="#{formateur.telephone}" id="telephone">  
                            #{formateur.telephone}  
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Excluir" />
                            </f:facet>
                            <p:commandLink value="Excluir" action="#{formateurController.exclure()}" onclick="if(!confirm('Existe déjà #{formateur.nom}?'))return false;" update =":form1:formateur"/>
                        </p:column>



                    </p:dataTable>
                    </h:form>




                     <p:dialog header="Formateur Detail" widgetVar="formateurDialog" resizable="false" id="formateurDlg" > 
               <h:form id="formateurDetailForm">
                <p:panelGrid id="display1" columns="2"  style="margin:0 auto;">   
            <h:outputText value="Adresse :"></h:outputText>
                        <h:outputText value="#{formateurController.selectedFormateur.adresse}" />

            <h:outputText value="cin :"></h:outputText>
                        <h:inputText value="#{formateurController.selectedFormateur.cin}" required="true" requiredMessage="Please Enter Name!"/>

            <h:outputText value="email :"></h:outputText>
                        <h:inputText value="#{formateurController.selectedFormateur.email}" required="true" requiredMessage="Please Enter Lastname!"/>

            <h:outputText value="nom :"></h:outputText>
                        <h:inputText value="#{formateurController.selectedFormateur.nom}"/>



            <h:outputText value="prenom :"></h:outputText>
                        <h:inputText value="#{formateurController.selectedFormateur.prenom}"/>

            <h:outputText value="pseudo :"></h:outputText>
                        <h:inputText value="#{formateurController.selectedFormateur.pseudo}"/>

            <h:outputText value="sexe :"></h:outputText>
            <h:inputText value="#{formateurController.selectedFormateur.sexe}"/>

            <h:outputText value="telephone :"></h:outputText>
            <h:inputText value="#{formateurController.selectedFormateur.telephone}" />
                    <f:facet name="footer">
                        <p:commandButton value="Update" update=":form1:dataTable, :growl"  oncomplete="handleSubmitRequest(xhr, status, args, 'formateurDlg','newUserForm'); " actionListener="#{formateurController.modifier(actionEvent)}"/>
                    </f:facet>
                </p:panelGrid> 
             </h:form>
          </p:dialog> 

<p:growl id="growl" showDetail="true" life="5000" />



            </p:layoutUnit>
        </p:layout>
    </h:body>
</html>

Upvotes: 0

Views: 1187

Answers (2)

Mr.Phuong
Mr.Phuong

Reputation: 30

I think you should use tool already have inside FIREFOX, CHROME or any explorer to identify component id for what you need to UPDATE. "Using right click on Button or any component on your form and chose inspect element(Q) (this is on FIREFOX) and then you can see id what you need to use (update or any)" i think it can help you identify exactly what id of component to use :). GL

Upvotes: 0

rdcrng
rdcrng

Reputation: 3443

First off, you don't have a component with id display, but I see one with display1. Secondly, display1 is inside the form with id formateurDetailForm. Therefore, I bet your offending update attribute should say :formateurDetailForm:display1.

Upvotes: 1

Related Questions