Visualforce загружает компоненты apex через ajax при загрузке страницы - PullRequest
3 голосов
/ 07 октября 2010

Может кто-нибудь сказать мне, как использовать ajax для загрузки apex pageBlockTable через ajax при загрузке страницы? Я видел примеры, показывающие, как использовать apex actionFunction, но примеры, как правило, просты (например, - возвращение строки из контроллера и размещение ее на странице. Мой контроллер возвращает список sObjects, и я просто не совсем уверен как это делается.

страница:

<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>

Контроллер:

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

1 Ответ

1 голос
/ 07 октября 2010

Я понял это. Хитрость заключается в том, чтобы использовать actionFunction, а затем вызывать ее непосредственно из javascript.

Итак, страница VF выглядит так:

<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>

и контроллер вот так:

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...