Domanda

Sono bloccato sul mio argomento reso qui - sono abbastanza positivo, sto tirando i valori dal record stesso e non dalla pagina di Visualforce. Quando modifico il valore (ARE_YOU_KP__C) dal record a un "No" - il rendering di PageBlocksection Shoud, ma per qualche motivo non lo fa. Qualcuno sa perché?

Penso di aver bisogno di qualche controller lavoro qui - ma non sono sicuro di dove andare da qui ...

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

Aggiornato - avvolto l'elemento da rendering in outputPanel con ID corretto: ha ancora il problema di attivare il mio booleano rendering come risultato di un cambiamento su un campo di inputfield - come avrei alternano questo nel controller? Penso di aver bisogno di valutare se il valore di inputfield= no, e impostare il rendering su true da quello - non sono sicuro di come però ...

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

Va bene un altro tentativo: questa volta funziona, ma non capisco il motivo per cui ... solo quello che lo fa. Questo è in aggiunta all'aggiunta di Azione="{! Updatenanswer}" All'actionupport sopra (o sotto, a seconda di quale modo lo vedi)

    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;
    }
.

Probabilmente il codice del controller rilevante

public ProposalExtension(ApexPages.StandardController pCon) {
    this.p = (Proposal__c)pCon.getRecord();
}
.

È stato utile?

Soluzione

Avvolgere l'elemento in un <apex:outputPanel> e ri-rendering che, non l'elemento che si desidera visualizzare.Il problema è che l'elemento non è nella pagina quando non è reso, quindi non è un obiettivo funzionante per il ri-rendering.

È qualcosa che spesso cattura le persone fuori, io incluso - ho scritto un post sul blog su di esso qui: http://www.laceysnr.com/2011/10/using-rerender-to-render-one-solution.html

** Modifica **

Non ha individuato prima di non avere un'azione specificata nel tuo tag <apex:actionSupport>.Puoi usarlo per chiamare l'azione sul controller.Poiché l'elenco Select sta scrivendo al valore che desideri, non è effettivamente bisogno di fare nulla nel codice (a meno che tu non si desidera) potresti semplicemente farlo:

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

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

Spero che ti aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top