2011-01-01 12 views
23

Oto mój układJSF + PrimeFaces: `atrybut update` nie aktualizuje składnik

<div id="mainPanel"> 
    <div id="padding"> 
     <h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/> 
    </div> 
    <div id="right"> 
     <h:form> 
      <p:commandButton value="Update" actionListener="#{bean.toggleComment}" update="text" /> 
     </h:form> 
    </div> 
</div> 

Kiedy klikam odnośnik Update, która ma włączyć renderComment logiczną i wyłączanie, nie przełączać wyświetlanie tekstu Personal Feed. Teraz, jeśli zamiast tego wstawiam formularz h:outputText i update z form, to działa. Dlaczego?

Odpowiedz

57

Atrybut update powinien wskazywać na istniejący identyfikator klienta w drzewie DOM HTML. Ponieważ jednak element nie jest dostępny w drzewie DOM HTML, ponieważ nie jest renderowany po stronie serwera, JS/ajax nie może znaleźć niczego w drzewie DOM HTML do aktualizacji.

W rzeczywistości powinieneś zawinąć go w inny element, który jest zawsze dostępny w drzewie DOM HTML, tak aby Ajax mógł go zlokalizować, a następnie użyć jego identyfikatora klienta w update. W twoim przypadku możesz użyć do tego celu padding.

<div id="mainPanel"> 
    <h:panelGroup id="padding" layout="block"> 
     <h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/> 
    </h:panelGroup> 
    <div id="right"> 
     <h:form> 
      <p:commandButton value="Update" actionListener="#{bean.toggleComment}" update=":padding" /> 
     </h:form> 
    </div> 
</div> 
+1

BaluC, co oznacza ':' w renderowanym atrybucie przed 'dopełnieniem'? Jeden poziom wyżej? – rozerro

+0

@rozerro: http://stackoverflow.com/q/8634156 – BalusC

Powiązane problemy