2010-10-06 23 views
3

Quelqu'un peut-il me dire comment utiliser ajax pour charger un apex pageBlockTable via ajax sur le chargement de la page? J'ai vu des exemples montrant comment utiliser un apex actionFunction, mais les exemples sont généralement simples (par exemple, renvoyer une chaîne du contrôleur et la mettre sur la page.) Mon contrôleur retourne une liste de sObjects et je ne suis pas sûr comment faireVisualforce charger les composants apex via ajax lors du chargement de la page

page:.

<apex:pageBlockTable value="{!TopContent}" var="item"> 
    <apex:column headerValue="Title"> 
     <apex:outputLink value="/sfc/#version?selectedDocumentId={!item.Id}"> 
      {!item.Title} 
     </apex:outputLink> 
    </apex:column> 
</apex:pageBlockTable> 
contrôleur

:..

List<ContentDocument> topContent; 
public List<ContentDocument> getTopContent() 
{ 
    if (topContent == null) 
    { 
     topContent = [select Id,Title from ContentDocument limit 10]; 
    } 
    return topContent; 
} 

Répondre

1

je me suis dit ceci L'astuce est d'utiliser un actionFunction puis appelez directement depuis javascript

Ainsi la page VF ressemble à ceci:

<apex:page controller="VfTestController"> 
    <apex:form> 
     <apex:actionFunction action="{!loadDocuments}" name="loadDocuments" rerender="pageBlock" status="myStatus" /> 
    </apex:form> 
    <apex:pageBlock id="pageBlock"> 
     <apex:pageBlockTable value="{!TopContent}" rendered="{!!ISBLANK(TopContent)}" var="item"> 
      <apex:column headerValue="Title"> 
       <apex:outputLink value="/sfc/#version?selectedDocumentId={!item.Id}"> 
        {!item.Title} 
       </apex:outputLink> 
      </apex:column> 
     </apex:pageBlockTable> 
     <apex:actionStatus startText="Loading content..." id="myStatus" /> 
    </apex:pageBlock> 
    <script type="text/javascript"> 
     window.setTimeout(loadDocuments, 100); 
    </script> 
</apex:page> 

et le contrôleur comme ceci:

public class VfTestController 
{ 
    List<ContentDocument> topContent; 
    public List<ContentDocument> getTopContent() 
    { 
     return topContent; 
    } 

    public PageReference loadDocuments() 
    { 
     if (topContent == null) 
     { 
      topContent = [select Id,Title from ContentDocument limit 10]; 
     } 
     return null; 
    } 
}