2013-02-15 8 views
7

Questo non funziona per me:Come fare riferimento p: commandLink in p: dataTable da p: blockUI trigger?

<h:form id="wfMgtForm"> 
    . 
    . 
    . 
    <p:dataTable id="wfTable" ..." var="item"> 
     <p:column> 
     . 
     . 
     . 
     </p:column> 
     <p:column> 
      <p:commandLink id="editWatchfolderButtonId" oncomplete="dlgEditWF.show()" update=":editWFForm" process="@none"> 
       <f:param value="#{item.value.ID}" name="editId"/> 
       <h:graphicImage alt="Edit Image" style="border: none" value="./images/edit.png" /> 
      </p:commandLink> 
     </p:column> 
    . 
    . 
    . 
    <p:blockUI block=":wfMgtForm" trigger="editWatchfolderButtonId"> 
     Loading...<br/> 
     <p:graphicImage alt="Loader Image" value="/images/loader.gif"/> 
    </p:blockUI> 
</h:form> 

L'errore che sto ottenendo è:

Cannot find component with identifier "editWatchfolderButtonId".

Quando ho usato Firebug per cercare l'ID, ho scoperto che ogni riga ha un ID diverso:

wfMgtForm:wfTable:0:editWatchfolderButtonId wfMgtForm:wfTable:1:editWatchfolderButtonId wfMgtForm:wfTable:2:editWatchfolderButtonId wfMgtForm:wfTable:3:editWatchfolderButtonId
ecc

Come devo fare riferimento a questa auto creato ID dal mio <p:blockUI>?

risposta

10

Il <p:dataTable> è anche un NamingContainer. Includi anche il suo ID.

<p:blockUI ... trigger="wfTable:editWatchfolderButtonId"> 

L'indice di riga è presente solo sul lato client, non sul lato server, quindi non è rilevante.


Aggiornamento: appena provato a livello locale, fissa infatti l'eccezione, ma non ha innescato l'interfaccia utente di blocco a tutti (primefaces 3.5). Sembra un bug in PrimeFaces.

Nel frattempo, la soluzione migliore è quella di attivare manualmente come suggerito da Aksel, ma poi un po 'diversa:

<p:commandLink ... onclick="bui.show()" oncomplete="bui.hide()"> 
... 
<p:blockUI widgetVar="bui" /> 
+1

un bug? ohhh non ancora ... – Danijel

+0

Anche per me in v 3.4.1, non c'è più nessuna eccezione, ma ancora nessuna interfaccia utente ho bloccato. – Danijel

+0

Questo totale degrada l'esperienza utente per la mia interfaccia utente. C'è * nessuna * possibilità di fornire una patch per PrimeFaces? Quanto è difficile da risolvere? – Danijel

4

Ecco un semplice esempio di utilizzo di commandLink per bloccare qualcosa. Modificata l'esempio vetrina da here

<h:form> 
    <p:commandButton value="blockMe" id="someId" /> 
    <br /> 
    <p:commandLink id="pnlBtn" value="Block" type="button" 
     onclick="bui.show()" /> 
    <br /> 
    <p:commandLink id="pnlBtn2" value="Unblock" type="button" 
     onclick="bui.hide()" /> 

    <p:blockUI block="someId" widgetVar="bui" /> 
</h:form> 
+0

Ho modificato la domanda, per favore dare un'occhiata. – Danijel

+0

Indovina "qualcun altro" era più veloce, ma tengo la risposta come BalusC fa riferimento. :) Per chiunque veda questo in futuro, potrebbe valere la pena notare che questa risposta si adatta alla domanda originale meglio di quella modificata. –

0

Per quelli come incompetenti come me, se BlockUI non è sparare, verificare che il " trigger "target ha abilitato Ajax. Ho passato quasi un giorno a cercare di capire perché BlockUI non ha sparato e ho scoperto che avevo il suo target configurato come 'ajax = "false"'.

0

È possibile utilizzare un selettore jQuery.

<p:commandLink styleClass="mybutton-class"> 
<p:blockUI ... trigger="@(.mybutton-class)">