Я работаю над страницей VF, где я вставляю запись, и в тот момент, когда она вставлена, она появится в следующем блоке страницы, и я использовал команду «Обновить страницу», но каким-то образом мой блок страницы «Подробности участников» не обновляется.

Может ли кто-нибудь помочь мне в этом вопросе, если это возможно. Код моей страницы vf ниже.

<apex:page Controller="StagingEventInsertAndShowData" lightningStylesheets="true">
<apex:form>
    <apex:pageBlock title="New Staging Event Attendee">
        <apex:pageBlockSection id="reRenderId">
            <apex:inputText label="Barcode" value="{!Barcode}"/>
            <apex:commandButton value="Insert" action="{!save}" reRender="reRenderId" oncomplete="refreshPage();"/>
        </apex:pageBlockSection>
    </apex:pageBlock>
    <apex:pageBlock title="Details of Attendees">
        <apex:pageBlockTable value="{!accList}" var="a">
            <apex:column headerValue="Barcode" value="{!a.Barcode__c}"/>
            <apex:column headerValue="Attendant" value="{!a.Attendant__c}"/>
            <apex:column headerValue="Campaign" value="{!a.Campaign_ID__c}"/>
            <apex:column headerValue="Email" value="{!a.Email__c}"/>
            <apex:column headerValue="Date Attended" value="{!a.Date_Attended__c}"/>
        </apex:pageBlockTable>
    </apex:pageBlock>
</apex:form>

Контроллер:

public class StagingEventInsertAndShowData {
    public String Barcode{get;set;}
    public List<Staging_Event_Attendee__c> accList {get;set;}

    public StagingEventInsertAndShowData(){
        accList=[SELECT Name,Barcode__c,Attendant__c,Campaign_ID__c,Email__c,Date_Attended__c FROM Staging_Event_Attendee__c Barcode__c ORDER BY Barcode__c ASC LIMIT 100];
    }

    public PageReference save() {
        Staging_Event_Attendee__c ac = new Staging_Event_Attendee__c();
        ac.Barcode__c = Barcode;
        insert ac;
        this.Barcode = null;
        return null;
    }
}
0
Lokesh 22 Июл 2019 в 11:22

3 ответа

Попробуй это:

Блок страницы:

<apex:pageBlock id="reRenderId" title="Details of Attendees">

Oncomplete="обновить страницу();" не требуется на командной кнопке

0
salesforce-sas 22 Июл 2019 в 10:43

Вам нужно перерисовать блок страницы, в котором заполняются данные учетной записи, обновить блок второй страницы, как показано ниже:

<apex:pageBlock title="Details of Attendees" id="reRenderId">

Всякий раз, когда запись сохраняется, она будет искать reRenderId для обновления этого конкретного блока.

oncomplete="refreshPage();" - это функция javascript, которая в вашем случае не требуется.

Ознакомьтесь с этим примером : пример reRender

0
Lokesh 22 Июл 2019 в 10:49

Есть несколько вещей, которые вам нужно изменить в вашем коде, чтобы это работало.

  • Вам нужно будет rerender pageBlock (в дополнение к pageBlockSection с inputText) при нажатии кнопки Insert, чтобы обновить этот pageBlockTable, чтобы показать вам обновленные записи, включая новую, которая была вставлена. Кроме того, нет необходимости вызывать refreshPage(); из commandButton.
  • Вы получаете записи в constructor, поэтому они всегда будут отображать одни и те же записи даже после того, как вы rerender pageBlockTable, т.е. не будут включать вставленную запись, потому что, ваш constructor не будет вызываться при нажатии на Insert. Вы можете просмотреть Порядок выполнения в Visualforce Страница, чтобы получить больше информации по этой теме. Поэтому, чтобы это работало, вам нужно будет либо создать getter для accList, либо снова получить все записи после вставки.

Таким образом, ваша страница visualforce будет

<apex:page Controller="StagingEventInsertAndShowData" lightningStylesheets="true">
    <apex:form>
        <apex:pageBlock title="New Staging Event Attendee">
            <apex:pageBlockSection id="reRenderId">
                <apex:inputText label="Barcode" value="{!Barcode}"/>
                <apex:commandButton value="Insert" action="{!save}" reRender="reRenderId,pageBlockRecords"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
        <apex:pageBlock title="Details of Attendees" id="pageBlockRecords">
            <apex:pageBlockTable value="{!accList}" var="a">
                <apex:column headerValue="Barcode" value="{!a.Barcode__c}"/>
                <apex:column headerValue="Attendant" value="{!a.Attendant__c}"/>
                <apex:column headerValue="Campaign" value="{!a.Campaign_ID__c}"/>
                <apex:column headerValue="Email" value="{!a.Email__c}"/>
                <apex:column headerValue="Date Attended" value="{!a.Date_Attended__c}"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

И контроллер должен быть

public class StagingEventInsertAndShowData {
    public String Barcode{get;set;}
    public List<Staging_Event_Attendee__c> accList {get;set;}

    public StagingEventInsertAndShowData(){
        getStagingRecords();
    }

    public void getStagingRecords(){
        accList=[SELECT Name,Barcode__c,Attendant__c,Campaign_ID__c,Email__c,Date_Attended__c FROM Staging_Event_Attendee__c Barcode__c ORDER BY Barcode__c ASC LIMIT 100];
    }

    public PageReference save() {
        Staging_Event_Attendee__c ac = new Staging_Event_Attendee__c();
        ac.Barcode__c = Barcode;
        insert ac;
        this.Barcode = null;
        getStagingRecords();
        return null;
    }
}
0
Vijay Ganji 22 Июл 2019 в 16:13