Salesforce (Visualforce):Procesar - valores de extracción de la página, no el registro?

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

Pregunta

Estoy atascado en mi prestados argumento aquí - estoy bastante positiva estoy tirando de los valores del registro en sí y no de la página de visualforce.Al cambiar el valor (son_usted_kp__c) a partir de la grabación de un "No" - la pageblocksection son de render, pero por alguna razón no lo hace.¿Alguien sabe por qué?

Creo que necesito un poco de trabajo del controlador aquí - pero no estás seguro de dónde ir de aquí...

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

Actualizado forrado en que el elemento representado en outputPanel con el id correcto:Todavía tengo el problema de la alternancia de mi representado booleano como resultado de un cambio en una inputField - ¿cómo puedo activar esta en el controlador?Yo creo que es necesario evaluar si el inputField valor = No, y establecer los prestados a true por que - no estoy seguro de cómo a pesar de que...

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

Bueno uno más en el intento, esta vez funciona, pero no acabo de conseguir por qué...sólo que lo hace.Esto es además de la adición de acción="{!updateAnswer}" para el actionSupport por encima (o por debajo, de cualquier manera que se vea)

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

Probablemente pertinentes del código de controlador de

public ProposalExtension(ApexPages.StandardController pCon) {
    this.p = (Proposal__c)pCon.getRecord();
}
¿Fue útil?

Solución

Envuelva el elemento en un <apex:outputPanel> y volver a renderizar, no en el elemento que desee que aparezca.El problema es que el elemento no está en la página cuando no prestados, así que no es un trabajo de destino para volver a procesar.

Es algo que a menudo las capturas de la gente, incluido yo mismo escribí un post en el blog sobre ello aquí: http://www.laceysnr.com/2011/10/using-rerender-to-render-one-solution.html

** EDIT **

No detectar antes de que usted no tiene una acción especificada en su <apex:actionSupport> de la etiqueta.Se puede utilizar para llamar a la acción en el controlador.Desde la lista de selección está escribiendo el valor que usted desea, usted realmente no necesita hacer nada en el código (a menos que usted desea), que sólo podría hacer esto:

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

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

Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top