В Visualforce выполняет ли рендеринг повторное выполнение после того, как reRender обновляет раздел? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь скрыть раздел searchCriteria при нажатии на ссылку «Изменить».Сокрытие выполняется в методе контроллера editSearchResult () с использованием переменной pageLoad.

«pageLoad» используется в разделе «searchCriteria» с отображаемым атрибутом.Но этот раздел не обновляется обновленными значениями из контроллера при нажатии на ссылку «Изменить».

Но если я удалю атрибут 'rendered' в разделе 'searchCriteria', система обновит раздел с обновленными значениями из Controller.Кто-нибудь может объяснить, как отображаются «визуализированные» ручки?

Код Visualforce:

<apex:page controller="RerenderDemoController">
    <apex:form id="thisForm">
        <apex:outputPanel id="searchCriteria" rendered="{!pageLoad}">
            <apex:pageBlock>
                <apex:pageBlockSection>
                    This is Search Criteria Section. Page Load: {!pageLoad}, 
                    User: <apex:outputText value="{!userName}"> 
        </apex:outputText> 
                </apex:pageBlockSection>
            </apex:pageBlock>
        </apex:outputPanel>

        <apex:outputPanel id="searchResults">
            <apex:pageBlock>
                <apex:pageBlockSection>
                    This is Search Results Section. {!accts}
                </apex:pageBlockSection>
            </apex:pageBlock>
        </apex:outputPanel>

        <apex:outputPanel id="EditResult">
            <apex:pageBlock>
                <apex:pageBlockSection>
                    This is Edit Result Section.
                    <apex:commandLink action="{!editSearchResult}" reRender="searchCriteria">Edit</apex:commandLink>
                </apex:pageBlockSection>
            </apex:pageBlock>
        </apex:outputPanel>

    </apex:form>
</apex:page>

Контроллер Apex:

public class RerenderDemoController {
    public List<Account> accts {get; set;}
    public Boolean pageLoad {get; set;}
    public String userName {get; set;}

    public RerenderDemoController() {
        pageLoad = true;
        userName = 'My First Name';
        accts = [select id, name from Account limit 10];
    }

    public void editSearchResult() {
        pageLoad = false;
        accts = [select id, name from Account limit 20];
        userName = 'My Last Name';
    }
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете использовать JQuery, чтобы скрыть содержимое, просто используйте html класс и используйте [jquery]: https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js

и используйте $('.classname').hide();, надеюсь, это поможет вам.

0 голосов
/ 15 февраля 2019

Что вы можете сделать, это обернуть outputPanel другим outputPanel

<apex:outputPanel id="searchCriteria">
    <apex:outputPanel rendered="{!pageLoad}">
        <apex:pageBlock>
            <apex:pageBlockSection>
                This is Search Criteria Section. Page Load: {!pageLoad}, 
                User: <apex:outputText value="{!userName}"> 
                     </apex:outputText> 
           </apex:pageBlockSection>
         </apex:pageBlock>
   </apex:outputPanel>
</apex:outputPanel>

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...