2011-09-16 10 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> 

...Nie można zaktualizować componet od P: 'aktualizacji' atrybut commandLink, link jest persent w 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 zostanie zaktualizowany, gdy łącze jest poza p:dataTable, ale kiedy link jest umieszczony w p:dataTable, p:dialog nie pokazuje zaktualizowanej wartości. Muszę zachować łącze w p:dataTable. Komponent do aktualizacji nie znajduje się w dataTable.

+0

Czy możesz wysłać swój kod bean.methodCall? Mam ten sam problem. – JsfLearner

+0

@SfsLearner: W metodzie fasoli zmieniam tylko wartość zmiennej. Zmieniona wartość powinna być wyświetlana w h: outputLabel, która jest wewnątrz p: dialog, ale problem polega na tym, że nadal wyświetla starą wartość, a nie nową wartość. Ale zmienia wartość metody zmiennej w komponencie bean, ale nowa wartość nie jest odzwierciedlana na stronie. public String methodCall() { this.var1 = true; } w tym przypadku po wywołaniu metody strona wciąż wyświetla "false" – Amruta

Odpowiedz

0

Udostępniłem tylko <p:commandLink> wewnątrz tabeli dataTable do update komponentem okna dialogowego, jeśli elementy tego okna dialogowego znajdowały się w ich własnych <h:form>.

Przykład:

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

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

Należy również pamiętać, że dodałem do okna atrybut, appendToBody="true". Jest to ważne dla lokalizacji okna dialogowego po ID po aktualizacji AJAX.

+0

Hi klon, dziękuję za odpowiedź .. w moim kodzie .. p: dataTable i p: dialog są obecne wewnątrz zwykłego tagu

.. – Amruta

+0

@Arruta, Tak, nie rób tego. Refaktor, aby nadać każdemu dialogowi własną wewnętrzną formę i nadać jedną wspólną postać innym elementom na stronie. Pamiętaj także o zastosowaniu znacznika 'appendToBody =" true "'. –

+0

Kiedy użyłem ": mainFormId: idOfThePanelCantainingDialog", zadziałało. Nie korzystałem z oddzielnych formularzy. Dzięki za odpowiedź n e ways :). – Amruta

0

Cześć Czy spróbować dołączyć id formularz następująco

<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> 

Nadzieję, że to pomaga!

Powiązane problemy