reRender und rendered-Attribut in visualforce
Schreibe ich eine visualforce-Seite mit dem Quellcode
<apex:page controller="MyController1">
<apex:form>
<apex:pageBlock >
<apex:pageBlockSection id="search">
<apex:commandLink action="{!commandLinkAction}" value="Advance Search" reRender="thePanel" id="theCommandLink"/>
<apex:outputPanel id="thePanelWrapper">
<apex:outputPanel id="thePanel" rendered="{! rend}" layout="block">My div</apex:outputPanel>
</apex:outputPanel>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
und die MyController1 Klasse ist
public class MyController1{
public Boolean rend{get;set;}
public PageReference commandLinkAction(){
rend=true;
return null;
}
}
wenn ich auf link "Erweiterte Suche" nichts passiert, aber ich hatte erwartet, outputPanel mit der id "thePanel" darstellen soll.warum ist es nicht Rendern bitte jemand erklären??
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im moment, auf den Sie klicken auf den link das panel nicht auf der Seite, SF nicht gerendert, es.
Als @Shimshon sagte, wenn der HTML-code generiert von Visualforce, der Visualforce-Komponenten als
rendered="false"
werden nicht angezeigt in der resultierenden HTML-Dokument.In diesem Fall:
wenn du gehst, ihn neu zu Rendern dieses panel, dann müssen Sie sicherstellen, dass die Komponente angezeigt wird im HTML-code, so dass der rerender-Aktion finden können. Da
{! rend}
zuerst auf false gesetzt, in der controller-Konstruktor "thePanel" ist nie gemacht in die Seite, damit Sie versuchen, ihn neu zu Rendern einer Komponente, die nicht vorhanden ist.@theGreatDanton 's Lösung wird funktionieren, weil
<apex:outputPanel id="thePanelWrapper">
ist der container, panel, dass ist immer gerendert:und wenn dieses panel zeigte rerender-Attribut, dann "thePanelWrapper" und deren untergeordnete Knoten ("thePanel") aktualisiert werden.
versuchen Sie, den untenstehenden code.
Hoffe, das hilft!!