JSF + Primefaces: Problem mit "gerendert" Komponenten mit AJAX

stimmen
4

EDIT
Cant scheinen zu bekommen renderedrichtig mit arbeiten updateAttribute. Hier ist mein Codes

        <ui:define name=left>
            <h:form>
                <p:commandLink value=Hey
                actionListener=#{bean.setRenderComment}
                update=comment/>
            </h:form>
       </ui:define>
       <ui:define name=right>
            <h:panelGroup id=comment rendered=#{bean.renderComment}>
                hello
            </h:panelGroup>
       </ui:define>

renderCommentist eine boolesche Attribute innen bean. setRenderCommentim Grunde wechselt den Zustand renderCommentwie folgt aus

this.renderComment = !this.renderComment;

Richtig, jedes Mal , wenn ich auf den Link klicken Hey, muss ich aktualisieren entweder zu machen hellooder auszuschalten. Wie kann ich das Problem beheben, so dass ich zu aktualisieren brauchen nicht zu

Veröffentlicht am 21/09/2010 um 00:28
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
13

Ich bin nicht mit Primefaces aber Richfaces auf meine Projekte. So bin ich nicht wirklich bewusst, wie der Aktualisierungsprozess von Primefaces erfolgt. Aber ich habe eine Idee, die leicht getestet werden kann.

Ihr Problem kann auf die Tatsache zurückzuführen sein , dass die Komponente neu zu machen (dh Update ) nicht auf der HTML - Seite zu finden. Wenn Ihr renderedAttribut ist gleich false, dann wird die <SPAN>mit commentid wird nicht in der HTML - Seite generiert integriert. Wenn also die Ajax - Anfrage auf der Client - Seite empfangen wird, ist der Ajax - Engine diese nicht in der Lage zu aktualisieren , <SPAN>da es nicht gefunden wird.

Also , was können Sie tun , ist immer Sie zu machen panelGroupund Ihr bewegt renderedAttribut zu einem verschachtelten <h:outputText>, die das enthält Hallo Nachricht.

Hier ist, was ich vorschlage:

<h:panelGroup id="comment">
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>

Auf diese Weise wird die panelGroup immer nach dem Ajax - Aufruf aktualisiert, und es wird die enthält Hallo Nachricht oder nicht, in Bezug auf den Wert des renderCommentAttributs Ihrer Bean.

Beantwortet am 21/09/2010 um 09:40
quelle vom benutzer

stimmen
1

Da die Komponente mit der ID commentnicht einer der Form der ist (eine UINamingContainerKomponente) Kinder, müssen Sie die ID Präfix mit :JSF anweisen , von der „oberen Ebene“ zu scannen.

Dies sollte tun:

<p:commandLink value="Hey"
    actionListener="#{bean.setRenderComment}"
    update=":comment" />
Beantwortet am 21/09/2010 um 00:50
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more