2011-09-16 8 views
5
<p:dataTable id="id" value="#{bean.soemList}" var="account"> 
    <p:commandLink value="#{account.id}" action="#{bean.methodCall}" 
     update="dialogID" oncomplete="dlg1.show();"> 
    </p:commandLink> 

...Impossibile aggiornare un componet da p: attributo 'update' commandLink, il link è persent in p: dataTable

<p:dialog header="#{i18n.details}" widgetVar="dlg1" modal="true" height="200" width="600"> 
    <h:panelGroup id="dialogID" layout="block"> 
     <h:outputLabel value="#{bean.var1}"></h:outputLabel> 
    </h:panelGroup> 
</p:dialog> 

p:dialog viene aggiornato quando il collegamento è al di fuori p:dataTable, ma quando il link è inserito in p:dataTable, p:dialog non mostra il valore aggiornato. Devo mantenere il collegamento in p:dataTable. Il componente da aggiornare non è in dataTable.

+0

Puoi pubblicare il tuo codice bean.methodCall? Ho lo stesso problema – JsfLearner

+0

@SfsLearner: Nel metodo bean sto semplicemente cambiando il valore della variabile. Il valore modificato dovrebbe essere visualizzato in h: label di output che è all'interno di p: dialog, ma il problema è che visualizza ancora il vecchio valore e non il nuovo valore. Ma cambia il valore della variabile nel metodo bean, ma il nuovo valore non si riflette sulla pagina. public String methodCall() { this.var1 = true; } in questo caso dopo chiamata metodo la pagina visualizza ancora 'false' – Amruta

risposta

0

Ho solo stato in grado di ottenere un <p:commandLink> all'interno di un DataTable update un componente di una finestra di dialogo se gli elementi di tale dialogo sono stati all'interno della propria <h:form>.

Esempio:

<p:dialog appendToBody="true" ...> 
    <h:form id="dialogForm" ...> 
    ... 
    </h:form> 
</p:dialog> 

<p:dataTable ...> 
    <h:form id="dataTableForm" ...> 
    ... 
    </h:form> 
</p:dataTable> 

Si noti inoltre che ho aggiunto alla finestra di dialogo l'attributo, appendToBody="true". Questo è importante per localizzare la finestra di dialogo con id dopo un aggiornamento AJAX.

+0

Ciao acero, grazie per aver risposto .. nel mio codice .. p: dataTable e p: dialog sono presenti nel tag comune

.. – Amruta

+0

@Amruta, Sì, non farlo Refactor per dare ad ogni dialog la propria forma interna e dare una forma comune per gli altri componenti nella pagina. Ricorda inoltre di applicare il tag 'appendToBody =" true "'. –

+0

Quando ho usato ': mainFormId: idOfThePanelCantainingDialog', ha funzionato. Non ho usato moduli separati. Grazie per la risposta n e modi :). – Amruta

0

Hi ha fatto si tenta di aggiungere il form id come segue

<form id="myformid"> 
..... 
    <p:commandLink value="#{account.id}" action="#{bean.methodCall}" update=":myformid:dialogID" oncomplete="dlg1.show();"> 
    </p:commandLink> 
.... 
<p:dialog header="#{i18n.details}" widgetVar="dlg1" modal="true" 
     height="200" width="600"> 
     <h:panelGroup id="dialogID" layout="block"> 
     <h:outputLabel value="#{bean.var1}"></h:outputLabel> 
.... 
</form> 

Speranza che aiuta!

Problemi correlati