0

Calling VF Experts:

Is it possible to conditionally render 2 different fields on a Visualforce page based on a value selected in a picklist? I have the first condition working properly but unsure if it's possible to add another condition to render a separate field.

Below is the business scenario I am trying to solve for:

1) If Match Partner = "Existing Partner", render a field called "Match Partner Existing" OR 2) If Match Partner == "New Partner", render a separate field called "Match Partner New"

Code Snippet:

<apex:pageblockSection title="Request Details" collapsible="true" columns="1" 
id="pbs1">
   <apex:pageblockSectionItem>
   <apex:outputLabel>Match Partner</apex:outputLabel>
   <apex:actionRegion >
       <apex:inputField value="{!PartnershipRequest__c.MatchPartner__c}" 
   label="Match Partner">
       <apex:actionSupport event="onchange" action="{!null}" rerender="op1"/>  
       </apex:inputField>
   </apex:actionRegion>
   </apex:pageblockSectionItem>

    <apex:outputPanel id="op1" >
       <apex:outputPanel rendered="{!If(PartnershipRequest__c.MatchPartner__c 
   == 'Existing Partner',true,false)}" id="op2">
           <apex:pageblockSection>
            <apex:inputField value=" 
    {!PartnershipRequest__c.MatchPartnerExisting__c}"/>
           </apex:pageblockSection>
       </apex:outputPanel>
    </apex:outputPanel>
    </apex:pageblockSection>

Render

  • 1
    Formatting tip - for code blocks, select the entire region and press Ctrl-K or hit the {} button. The entire region must be indented by at least 4 spaces. – David Reed Dec 20 '18 at 22:08
  • Please note you can always repalce IF(condition, true, false) with simply condition. – Adrian Larson Dec 20 '18 at 22:28
1

Sure. You've already got the pattern you need, and the conditions you have in place are entirely independent of one another - so you just need another <apex:outputPanel> with a different rendered condition.

   <apex:outputPanel rendered="{!If(PartnershipRequest__c.MatchPartner__c 
 == 'Existing Partner',true,false)}" id="op2">

Side note here: the rendered attribute is expecting a Boolean value, and PartnershipRequest__c.MatchPartner__c == 'Existing Partner' is already a Boolean expression. You can omit the IF() and just do

   <apex:outputPanel rendered="{! PartnershipRequest__c.MatchPartner__c 
 == 'Existing Partner' }" id="op2">

Your other conditional would be identical save for the text value 'New Partner', in a new <apex:outputPanel> right after (and outside) this one.

  • Thanks @David Reed. I added the other output panel with seprate condition however the second picklist is still not being rendered separately when the conditions are met (i.e., Match Partner == 'New Partner'). Any ideas? – FWSFDC Dec 21 '18 at 14:53
  • Below is the second output panel/condition: code <apex:outputPanel id="op3" > <apex:outputPanel rendered="{!PartnershipRequest__c.MatchPartner__c == 'New Partner'}" id="op4"> <apex:pageblockSection > <apex:inputField value="{!PartnershipRequest__c.MatchPartnerNew__c}"/> </apex:pageblockSection> </apex:outputPanel> </apex:outputPanel><br/>code – FWSFDC Dec 21 '18 at 14:54
  • Make sure the actionSupport rerender targets that panel too. – David Reed Dec 21 '18 at 14:55
0
<apex:actionRegion >
<apex:inputField value="{!PartnershipRequest__c.MatchPartner__c}" label="Match 
Partner">
<apex:actionSupport event="onchange" action="{!null}" rerender="op1,op3"/>  
</apex:inputField>
</apex:actionRegion>
</apex:pageblockSectionItem>

<apex:outputPanel id="op1" >
<apex:outputPanel rendered="{!PartnershipRequest__c.MatchPartner__c == 'Existing 
Partner'}" id="op2">
<apex:pageblockSection > 
<apex:inputField value="{!PartnershipRequest__c.MatchPartnerExisting__c}"/>
</apex:pageblockSection>
</apex:outputPanel>
</apex:outputPanel>

<apex:outputPanel id="op3" >
<apex:outputPanel rendered="{!PartnershipRequest__c.MatchPartner__c == 'New 
Partner'}" id="op4">
<apex:pageblockSection >     
<apex:inputField value="{!PartnershipRequest__c.MatchPartnerNew__c}"/>
</apex:pageblockSection>
</apex:outputPanel>
</apex:outputPanel><br/>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.