قوة المبيعات (Visualforce):إعادة العرض - سحب القيم من الصفحة، وليس السجل؟

StackOverflow https://stackoverflow.com/questions/8976144

سؤال

أنا عالق في حجتي المقدمة هنا - أنا متأكد إلى حد ما من أنني أسحب القيم من السجل نفسه وليس من صفحة القوة المرئية.عندما أقوم بتغيير القيمة (are_you_kp__c) من السجل إلى "لا" - يجب أن يتم عرض قسم pageblock، ولكن لسبب ما لا يحدث ذلك.هل يعرف أحد لماذا؟

أعتقد أنني بحاجة إلى بعض أعمال التحكم هنا - ولكن لست متأكدًا من أين أذهب من هنا ...

<apex:pageBlock title="New Bid" mode="maindetail" tabStyle="Proposal__c">
    <apex:messages/>
    <apex:actionRegion>
    <apex:pageBlockSection columns="2" title="Bid Information" collapsible="false" showHeader="true">
        <apex:inputField value="{!rfp.Bid_Amount__c}"/>
        <apex:outputField value="{!rfp.Bid_Date__c}"/>
        <apex:inputField value="{!rfp.Bid_Deliver_By__c}"/>
        <apex:inputField value="{!rfp.Bid_Comments__c}"/>
        <apex:pageBlockSectionItem>
               <apex:outputLabel value="Are you the Key Appraiser?"/>
               <apex:outputPanel>             
                   <apex:inputField value="{!rfp.are_you_kp__c}" required="true">
                       <apex:actionSupport status="StatusChange" event="onchange" rerender="PageErrors, appraiserInfo"/>
                       <apex:actionStatus startText="Updating page ..." id="StatusChange"/>
                   </apex:inputField>  
               </apex:outputPanel>
        </apex:pageBlockSectionItem> 
    </apex:pageBlockSection>
    </apex:actionRegion>
    <apex:pageBlockSection title="Testing" columns="2" rendered="{!rfp.are_you_kp__c == 'No'}" id="appraiserInfo">
        <apex:pageBlockSectionItem>
            <apex:outputLabel value="Single Point of Contact" for="spoc"/>
                <apex:selectList id="spoc" value="{!rfp.SPOCL__c}" size="1" title="Single Point of Contact Select">
                    <apex:selectOptions value="{!SPOCS}"></apex:selectOptions>
                </apex:selectList>
        </apex:pageBlockSectionItem>
    </apex:pageBlockSection>
</apex:pageBlock>

تم التحديث - تم تغليف العنصر المطلوب عرضه في OutputPanel بالمعرف الصحيح:لا تزال تواجه مشكلة تبديل القيمة المنطقية المقدمة كنتيجة للتغيير في حقل الإدخال - كيف يمكنني تبديل هذا في وحدة التحكم؟أعتقد أنني بحاجة إلى تقييم ما إذا كانت قيمة inputField = لا، وتعيين العرض على "صحيح" من خلال ذلك - لست متأكدًا من ذلك ...

<apex:outputPanel id="appraiserInfo">
<apex:pageBlockSection title="Testing" columns="2" rendered="{!rfp.are_you_kp__c == 'No'}">
    <apex:pageBlockSectionItem>
        <apex:outputLabel value="Single Point of Contact" for="spoc"/>
            <apex:selectList id="spoc" value="{!rfp.SPOCL__c}" size="1" title="Single Point of Contact Select">
            <apex:selectOptions value="{!SPOCS}"></apex:selectOptions>
            </apex:selectList>
    </apex:pageBlockSectionItem>
</apex:pageBlockSection></apex:outputPanel>

حسنًا، محاولة أخرى - نجحت هذه المرة، لكنني لا أفهم السبب... فقط نجحت.هذا بالإضافة إلى إضافة الإجراء = "{!updateAnswer}" إلى الإجراء actionSupport أعلاه (أو أدناه، بأي طريقة تراها)

    public pageReference updateAnswer(){
       if(this.p.are_you_kp__c == 'No')
       rfp.are_you_kp__c = 'No';
       try{
        update rfp;
          }
        catch (DmlException ex){
            ApexPages.addMessages(ex);
            return null;
       }
       return null;
    }

ربما رمز وحدة التحكم ذات الصلة

public ProposalExtension(ApexPages.StandardController pCon) {
    this.p = (Proposal__c)pCon.getRecord();
}
هل كانت مفيدة؟

المحلول

لف العنصر في <apex:outputPanel> وأعد عرض ذلك، وليس العنصر الذي تريد ظهوره.تكمن المشكلة في أن العنصر لا يكون موجودًا في الصفحة عندما لا يتم عرضه، لذا فهو ليس هدفًا عمليًا لإعادة العرض.

إنه شيء غالبًا ما يلفت انتباه الناس، بما في ذلك أنا — لقد كتبت مشاركة مدونة حول هذا الموضوع هنا: http://www.laceysnr.com/2011/10/using-rerender-to-render-one-solution.html

** يحرر **

لم ألاحظ من قبل أنه لم يكن لديك إجراء محدد في ملفك <apex:actionSupport> بطاقة شعار.يمكنك استخدام ذلك لاستدعاء الإجراء على وحدة التحكم.نظرًا لأن قائمة التحديد تكتب بالقيمة التي تريدها، فلن تحتاج فعليًا إلى القيام بأي شيء في الكود (إلا إذا كنت ترغب في ذلك) يمكنك فقط القيام بذلك:

// controller
public Pagereference UpdateAnswer()
{
  // do some stuff if you want
  return null
}

// page
<apex:actionSupport action="{!UpdateAnswer}" status="StatusChange" event="onchange" rerender="PageErrors, appraiserInfo"/>

امل ان يساعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top