2016-04-08 11 views
0

Ich versuche, einen Teil der Seite auf Knopfdruck zu aktualisieren. Gerade jetzt, ich habe folgendes:p: commandButton aktualisiert die ganze Seite statt teilweise während f: ajax funktioniert gut

template.xhtml

<h:form prependId="false"> 

     <h:commandButton value="NEWS" action="news"> 
      <f:ajax render="newsContent"></f:ajax> 
     </h:commandButton> 

     <h:panelGroup layout="block" id="newsContent"> 
      <ui:insert name="newsContent"> 
       <ui:include src="/WEB-INF/partials/news/news.xhtml"/> 
      </ui:insert> 
     </h:panelGroup> 

    </h:form> 

/WEB-INF/partials/news/news.xhtml

<h:commandLink action="newsdetails"> 
    <f:ajax render="newsContent" /> 
</h:commandLlink> 

newsdetails.xhtml

<h:commandButton value="INDEX" action="index"> 
    <f:ajax render="newsContent" /> 
</h:commandButton> 

Gerade jetzt seine Arbeit in Ordnung, aber wenn ich die <h:commandbutton> mit so etwas wie

<p:commandButton value="INDEX" action="index" update="newsContent"/> 

Dann wird der Inhalt aktualisiert wird ersetzen, aber die Seite wird aktualisiert. Irgendwelche Gedanken, was ich hier falsch mache?

+0

Was meinst du mit Seite ist aktualisiert? Neu geladen? Oder verlieren Sie den Spielraum? – tak3shi

+2

Hör auf mit 'prependId =" false "', benutze es nie, es ist ein unbedachter Rest von JSF 1.2. – BalusC

Antwort

0

Ich löste es schließlich.

Ich habe einen actionListener auf meiner Schaltfläche verwendet.

<p:commandLink actionListener="#{news.setCurrent(n)}" update="newsContent" /> 

Die Quelle für die nun auch von einer Bean lesen:

<h:panelGroup layout="block" id="newsContent"> 
    <ui:insert name="newsContent"> 
     <ui:include src="#{news.page}"/> 
    </ui:insert> 
</h:panelGroup> 

Und der Getter für die Seite etwas wie folgt aussieht: null

public String getPage() { 
    if(current == null){ 
     return "/WEB-INF/partials/news/news.xhtml"; 
    } 
    return "/WEB-INF/partials/news/details.xhtml"; 
} 

Auf Pageload die currentObject ist nach wie vor so wird die news.xhtml angezeigt. Nach dem Klicken wird der aktuelle Wert auf ein Objekt gesetzt und die Seite wird auf die Detailseite aktualisiert. Alles ohne Neuladen der Seite.

0

Sie rufen keine gültige Ajax-Aktion:

action="index" entfernen Neuladen der Indexseite zu vermeiden.

+0

Wenn dies die Antwort ist, ist es immer noch seltsam ... dass einer funktioniert und der andere nicht ... – Kukeltje

+0

Entfernen der Aktion = "Index" auf der Schaltfläche bewirkt nur, dass die Schaltfläche nichts tut. Index ist die XHTML-Datei mit dem Inhalt, der aktualisiert werden sollte. – user1882509

+0

Mit einem p: commandButton führen Sie standardmäßig eine Ajax-Anfrage aus. Hierzu sind keine Maßnahmen erforderlich. Sie haben ausgewählt, newsContent zu aktualisieren. Wenn nichts passiert, sollten Sie überprüfen, ob Sie einen Code mit einem actionListener aufrufen müssen, um die gewünschte Änderung vorzubereiten. – tak3shi