0

am using primefaces datatable . There is problem with updating the primefaces datatable. I have a command button and when I submitted my command button I want to update my datatable.

the code am giving below:

<h:form  id="mainform">
       <p:outputPanel id="my" autoUpdate="true">
            <p:dataTable var="test" value="#{examinationFormBean.examinationList}" 
            paginator="false" rows="10" id="datatable" widgetVar="examinationdata" 
            filteredValue="#{examinationFormBean.getFilterExaminationList}">


            <f:facet name="header">

                 <p:outputPanel>
                     <h:outputText value="Search all fields:" />
                     <p:inputText id="globalFilter" onkeyup="PF('examinationdata').filter()"
                    style="width:150px" />
               </p:outputPanel>

             </f:facet>



            <p:column headerText="Id" filterBy="#{test.formStatus.id}">
                <h:outputText value="#{test.formStatus.id}" />
            </p:column>

            <p:column headerText="Name Of Candidate" filterBy="#{test.formStatus.user.name}">
                <h:outputText value="#{test.formStatus.user.name}" />
            </p:column>

            <p:column headerText="Examination" filterBy="#{test.examination.name}">
                <h:outputText value="#{test.examination.name}" />
            </p:column>


             <p:column headerText="View/Action">
                  <p:commandLink value="View"   action="#{examinationFormBean.readFormStatus(test.formStatus.id)}" 
                   oncomplete="PF('test').show()" update="@(.ui-panel)">
                    </p:commandLink>
             </p:column>

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


and my diloag box is :

         <p:dialog  widgetVar="test"  modal="true" id="dialog" height="600" width="760" dynamic="true" draggable="false" closable="true">

                <h:form id="data">
                  <div class="row" >

                      <p:growl id="growl" sticky="true" showDetail="true" />

                       <p:panel header="Examination Details">

                        <h:panelGrid columns="2" cellpadding="4"  border="1"  id="panael1" style="text-align: left;color: #333399;" width="760">

                                <h:outputText   value="#{msg['elicense.examinationform.personal.proposeofexam']}"/>
                                <h:outputText id="propExam" value="#{examinationFormBean.examination.name}"/>

                                <h:outputText  value="#{msg['elicense.examinationform.personal.classofcertificates']}" />


                                <ui:fragment rendered="#{examinationFormBean.elementaryPrinciples==true}">
                                   <h:outputText id="grid"  value="Elemetry Principle"/> 
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.wiringForSystem==true}">
                                    <p:spacer></p:spacer>
                                   <h:outputText id="data1" value="Wiring for System not Exceeding 250 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.dcApparatus==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data2" value="D. C. Apparatus not Exceeding 650 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.acApparatus==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data31" value="A. C. Apparatus not Exceeding 650 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.acApparatus==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data3" value="A. C. Apparatus not Exceeding 650 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.undergroundCable1100Volts==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data4" value="Underground Cables Voltage upto 1100 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.undergroundCable11900Volts==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data5" value="Underground Cables Voltage upto 11900 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.undergroundCable3300Volts==true}">
                                  <p:spacer></p:spacer>
                                <h:outputText id="data6" value="Underground Cables Voltage exceeding 33000 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.installationExceding650Volts==true}">
                                 <p:spacer></p:spacer>
                                 <h:outputText id="data7" value="Installation exceeding 650 Votts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.overHeadLiesupto650Volts==true}">
                                 <p:spacer></p:spacer>
                                <h:outputText id="data8" value="Overhead lies Upto 650 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.overHeadLiesupto3300Volts==true}">
                                <p:spacer></p:spacer>
                                <h:outputText id="data9" value="Overhead lies Upto 33000 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.overHeadLiesExceeding3300Volts==true}">
                                 <p:spacer></p:spacer>
                                <h:outputText id="data10" value="Overhead lies Exceeding 33000 Volts" ></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.minigInstallation==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data11" value="Mining Installation(Bellow Ground)"></h:outputText>
                                </ui:fragment>

                               <ui:fragment rendered="#{examinationFormBean.minigInstallation==true}">
                                 <p:spacer></p:spacer>   
                                <h:outputText id="data12" value="Mining Installation(Bellow Ground)"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.minigInstallation==true}">
                                 <p:spacer></p:spacer>   
                                 <h:outputText id="data121" value="Mining Installation(Bellow Ground)" ></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.wiringForSystemUpto650Volts==true}">
                                 <p:spacer></p:spacer>
                                <h:outputText id="data13" value="Wiring for System not exceeding 650 Volts"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.electricIt==true}">
                                 <p:spacer></p:spacer>
                                  <h:outputText id="data14" value="Electric Lt"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.electricIt==true}">
                                 <p:spacer></p:spacer>
                                  <h:outputText id="data141" value="Electric Lt"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.electricSigns==true}">
                                 <p:spacer></p:spacer>
                                 <h:outputText id="data15" value="Electrict Signs"></h:outputText>
                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.mediumPressure==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data16" value="Medium Pressure Indian Electricity Rules 1959" />

                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.mediumPressure==true}">
                                  <p:spacer></p:spacer>
                                  <h:outputText id="data161" value="Medium Pressure Indian Electricity Rules 1959" />

                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.ltOverHeadLines==true}">
                                   <p:spacer></p:spacer>
                                 <h:outputText id="data18" value="Overhead Lines(LT)" />

                                </ui:fragment>

                                <ui:fragment rendered="#{examinationFormBean.paperInsulatedCables==true}">
                                  <p:spacer></p:spacer>
                                 <h:outputText id="data19" value="Pepar Insulated cables(laying and joining)" /> 

                                </ui:fragment>




                                <h:outputText value="#{msg['elicense.examinationform.examination.centerofexamination']}" />
                                <h:outputText id="examcenterid" value="#{examinationFormBean.center.name}" />

                                <h:outputText value="#{msg['elicense.examinationform.examination.languagepaper']}" />
                                <h:outputText id="language" value="#{examinationFormBean.language.name}" />

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



                        <!-- personal details -->

                            <ui:include src="/pages/personalView.xhtml" />



                        <!-- Education Qualification -->

                        <p:panel header="Education Qualification">

                            <ui:include src="/pages/educationalQualificationsView.xhtml" />


                        </p:panel>


                        <!-- Certificate or Permit Details -->


                        <p:panel header="Previous Certificate Details">
                            <h:panelGrid columns="2" style="text-align: left;color: #333399;" width="760">

                                <h:outputText   value="#{msg['elicense.examinationform.academic.premitno']}" />
                                <h:outputText id="permitid" value="#{examinationFormBean.previousCertificate.previousPermitNo}" />

                                <h:outputText   value="#{msg['elicense.examinationform.academic.certificate']}" />
                                <h:outputText id="certificateid"    value="#{examinationFormBean.previousCertificateNo}" />

                                <h:outputText   value="#{msg['elicense.examinationform.academic.otherstatepermitno']}" />
                                <h:outputText id="otherstatepermitid"   value="#{examinationFormBean.otherStatePermitNo}" />

                                <h:outputText   value="#{msg['elicense.examinationform.academic.otherstatecertificateno']}" />
                                <h:outputText id="otherstatecertificateid"  value="#{examinationFormBean.otherStateCertificateNo}" />

                                <!-- <h:outputText
                                    value="#{msg['elicense.examinationform.academic.dateofissue']}" />
                                <h:outputText id="compopupforprivious"
                                    value="#{examinationFormBean.previousRegistrationDate}" />
     -->
                            </h:panelGrid>
                        </p:panel>


                        <!-- Experience Details -->

                        <p:panel header="Experience Details">
                            <ui:include src="/pages/experienceView.xhtml" />
                        </p:panel>



                        <!-- Treasury Challan Details -->

                        <ui:include src="/pages/treasuryChallanView.xhtml" />


                        <!-- Attachment -->

                        <p:panel header="Upload necessary Document">

                            <h:panelGrid columns="2" style="text-align: left;color: #333399;" width="760" border="1">

                                <h:outputText value="#{msg['elicense.examinationform.uplod.document']}" />

                                <p:graphicImage value="#{examinationFormBean.candidatePhoto}" />

                                <h:outputText  value="#{msg['elicense.examinationform.uplod.sign']}" />
                                <p:graphicImage value="#{examinationFormBean.signature}"    mode="simple" disabled="false" 
                                label="Candidates Signature " />
                                <p:spacer></p:spacer>
                                 <p:messages id="messageid"/>

                                <h:outputText value="Action :" class="alignment"/>

                                 <p:selectOneRadio id="console" value="#{examinationFormBean.action}" 
                                  required="true" label="Action">
                                    <f:selectItem itemLabel="Ok" itemValue="ok" />
                                    <f:selectItem itemLabel="Have Issued" itemValue="haveissue" />
                                     <p:ajax process="console"   update="@form" />
                                </p:selectOneRadio>

                                <h:outputLabel value="Comment:" rendered="#{examinationFormBean.action eq 'haveissue'}"></h:outputLabel>

                                <h:inputText id="compid"    value="#{examinationFormBean.comment}" rendered="#{examinationFormBean.action eq 'haveissue'}"/>
                                 <p:watermark for="compid" value="Enter Valid Reason"></p:watermark>

                                <p:commandButton  value="Forwarded to Zonal Electrical Inspector>>"
                                  actionListener="#{examinationFormBean.saveFormStatusByOfficeAssistent()}"  update=**"messageid,my"**  process="data"  oncomplete="if (args &amp;&amp; !args.validationFailed) PF('test').hide()" >


                              </p:commandButton>

                            </h:panelGrid>

                        </p:panel>

                    </div>
            </h:form>   

        </p:dialog>

I want to update my datatable and I am using outputpannel id in my command button update,again ia have used my datatable id but primefaces could not find it.

Cœur
  • 37,241
  • 25
  • 195
  • 267
Chandan Sarma
  • 308
  • 2
  • 5
  • 19

3 Answers3

1

Referencing components in a complex layout with several naming containers can be a problem, but the simplest solution in these situations is to target the component by style class.

<p:dataTable ... styleClass="myDataTable" ... >

<p:commandButton ... update="@(.myDataTable)" ... >

Another upside of this approach is that it is immune to layout changes (otherwise you would have to update ids of the components you want to update whenever you add/remove another naming container in relevant position).

UPDATE (from comments)

Leave saveFormStatusByOfficeAssistent() signature as it was (return void), just at the end of the method add the line examinationList=examinationDetailsService.readExaminationList();

public void saveFormStatusByOfficeAssistent() { 
    System.out.println("hiiii"+this.getComment()); 
    formStatus.setStatus(getAction()); 
    formStatus.setComment(this.getComment()); 
    examinationDetailsService.saveFormStatus(formStatus); 
    System.out.println("Hi page successfully save"+getAction()); 
    this.setAction(""); this.setComment(null); 
    examinationList=examinationDetailsService.readExaminationList();
}

And getUserList() should just return examinationList

public List<ExaminationDetails> getUserList() {
    return examinationList;
}
Predrag Maric
  • 23,938
  • 5
  • 52
  • 68
  • I have trie your code but datatable is not updating. I have generated my data table in init() method – Chandan Sarma Nov 17 '14 at 09:34
  • @ChandanSarma Are there any errors on client or server? – Predrag Maric Nov 17 '14 at 09:38
  • @ChandanSarma This code should work 100%, so if it doesn't then probably there is some other thing relevant to the question. You might add that `init()` method details to your question, as that could be important for proper answer. – Predrag Maric Nov 17 '14 at 10:08
  • public List getUserList() { return examinationList=examinationDetailsService.readExaminationList(); } here i am generating list but still table not updating – Chandan Sarma Nov 17 '14 at 10:21
  • Is `#{examinationFormBean.saveFormStatusByOfficeAssistent()}` being called? Try moving `examinationList=examinationDetailsService.readExaminationList()` in that method, and just return `examinationList` from `getUserList()` to see if that works. – Predrag Maric Nov 17 '14 at 10:27
  • I have change my code here but nothing changed please check itpublic List saveFormStatusByOfficeAssistent() { System.out.println("hiiii"+this.getComment()); formStatus.setStatus(getAction()); formStatus.setComment(this.getComment()); examinationDetailsService.saveFormStatus(formStatus); System.out.println("Hi page successfully save"+getAction()); this.setAction(""); this.setComment(null); return examinationList=examinationDetailsService.readExaminationList(); //resetForm(); //return "/pages/AdminView.xhtml"; } – Chandan Sarma Nov 17 '14 at 10:46
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/65065/discussion-between-predrag-maric-and-chandan-sarma). – Predrag Maric Nov 17 '14 at 10:53
0

The problem is you are not referencing the components properly. You need to add the form id. i.e update=":mainForm:my , :data:messageid"

0

Well, calling update on a component that's placed in another NamingContainer, needs a absolute id/path resolution

You can try something like these on your p:commandButton component

update=":#{p:component('datatable')}"
update="PF('examinationdata')}"
update=":mainform"

Or you could inspect your html code and find the datatable's absolute id. More reading here

Community
  • 1
  • 1
yannicuLar
  • 3,083
  • 3
  • 32
  • 50