function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
App DevelopmentApp Development 

Field not rendering properly on VF page...

I have developed page to display..object,itsfields,childobjects,relationships and childobjfields

right now i have a problem with to render the child object fields..when we do change in parent objects...
it should render by according to respective child object fields.

Class:

public with sharing class ConfigurationController { 

    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); 
    public String selectedObject {get; set;}
    public String selectedField {get; set;}
     public String selectedChildobject {get; set;}
     public String selectedchildField {get; set;}
     public String Relationship {get; set;}
     
    Public ConfigurationController(){   
        selectedObject = 'Account';
        selectedChildobject = 'Account';
    }

    public List<SelectOption> getObjectNames(){
        List<SelectOption> objNames = new List<SelectOption>();
        List<String> entities = new List<String>(schemaMap.keySet());
        entities.sort();
        for(String name : entities)
        {
            objNames.add(new SelectOption(schemaMap.get(name).getDescribe().getName() ,schemaMap.get(name).getDescribe().getLabel() ));
        }
        return objNames;
     }

     public List<SelectOption> getObjectFields(){
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        Schema.SObjectType ObjectSchema = schemaMap.get(selectedObject);
        Map<String, Schema.SObjectField> fieldMap = ObjectSchema.getDescribe().fields.getMap();
        List<SelectOption> fieldNames = new List<SelectOption>();
        for (String fieldName: fieldMap.keySet()) 
        {  
            fieldNames.add(new SelectOption(fieldMap.get(fieldName).getDescribe().getLabel(),fieldMap.get(fieldName).getDescribe().getLabel()));
        }
        return fieldNames;
      } 
      
      public List<SelectOption> getRelatedObjects(){
        map<string,string> relatedObjectsMap = new map<string,string>();
        system.debug('selectedObject :'+selectedObject);
        list<Schema.Childrelationship> relatedObjectsList = Schema.getGlobalDescribe().get(selectedObject).getdescribe().getChildRelationships();
        system.debug('relatedObjectsList :'+relatedObjectsList);
        List<SelectOption> ChildobjNames = new List<SelectOption>();
        for (Schema.Childrelationship  relatedObject : relatedObjectsList) {
             if(relatedObject.getChildSObject().getDescribe().isUpdateable()
                    && 
                    relatedObject.getChildSObject().getDescribe().getKeyPrefix()!=null
                    && 
                    !relatedObject.getChildSObject().getDescribe().isCustomSetting()
                    &&
                    relatedObject.getChildSObject().getDescribe().isCreateable()
                )
                   ChildobjNames.add(new SelectOption(relatedObject.getChildSObject().getDescribe().getName(),relatedObject.getChildSObject().getDescribe().getLabel()));
                   system.debug('ChildobjNames :'+ChildobjNames);
           }
           return ChildobjNames;
    }
    
    public List<SelectOption> getRelationships(){
        map<string,string> relatedObjectsMap = new map<string,string>();
        system.debug('selectedObject :'+selectedObject );
        list<Schema.Childrelationship> relatedObjectsList = Schema.getGlobalDescribe().get(selectedObject).getdescribe().getChildRelationships();
        system.debug('relatedObjectsList :'+relatedObjectsList);
        List<SelectOption> Relationships = new List<SelectOption>();
        for (Schema.Childrelationship  relatedObject : relatedObjectsList) {
                 if(relatedObject.getChildSObject().getDescribe().isUpdateable()
                    && 
                    relatedObject.getChildSObject().getDescribe().getKeyPrefix()!=null
                    && 
                    !relatedObject.getChildSObject().getDescribe().isCustomSetting()
                    &&
                    relatedObject.getChildSObject().getDescribe().isCreateable()
                )
                   if(relatedObject.getRelationshipName() != null){  
                       Relationships.add(new SelectOption(relatedObject.getRelationshipName(),relatedObject.getRelationshipName()));
                   }     
                   system.debug('Relationships :'+Relationships); 
           }
           return Relationships;
    }
    
    public List<SelectOption> getChildObjectFields(){
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        system.debug('selectedChildobject :'+selectedChildobject);
        Schema.SObjectType ObjectSchema = schemaMap.get(selectedChildobject);
        Map<String, Schema.SObjectField> ChildfieldMap = ObjectSchema.getDescribe().fields.getMap();
        List<SelectOption> ChildfieldNames = new List<SelectOption>();
        for (String ChildfieldName: ChildfieldMap.keySet()) 
        {  
            ChildfieldNames.add(new SelectOption(ChildfieldMap.get(ChildfieldName).getDescribe().getLabel(),ChildfieldMap.get(ChildfieldName).getDescribe().getLabel()));
        }
        return ChildfieldNames;
      } 
}

Vf page:

<apex:page controller="ConfigurationController" sidebar="false"> 
<apex:form > 
      <apex:pageBlock >
          <apex:pageBlockSection columns="2" title="ParentSection">

              <apex:pageBlockSectionItem >
                  <apex:outputlabel value="Object:"/> 
                      <apex:actionRegion >      
                           <apex:selectList value="{!selectedObject}" size="1">
                                    <apex:selectOptions value="{!ObjectNames}"/>
                                    <apex:actionSupport event="onchange" rerender="myFields,childobj,relationship,childfields1"/>
                           </apex:selectList>
                     </apex:actionRegion>                         
              </apex:pageBlockSectionItem>

              <apex:pageBlockSectionItem >
                      <apex:outputlabel value="Fields:"/>   
                      <apex:outputPanel id="myFields">   
                        <apex:actionRegion >  
                           <apex:selectList value="{!selectedField}" size="1">
                                <apex:selectOptions value="{!ObjectFields}"/>
                            </apex:selectList>
                        </apex:actionRegion>      
                     </apex:outputPanel>
              </apex:pageBlockSectionItem>

          </apex:pageBlockSection>
          
           <apex:pageBlockSection columns="3" title="ChildSection"> 

              <apex:pageBlockSectionItem >
                  <apex:outputlabel value="ChildObjects:"/> 
                      <apex:outputPanel id="childobj">   
                      <apex:actionRegion >      
                           <apex:selectList value="{!selectedChildobject}" size="1">
                                    <apex:selectOptions value="{!RelatedObjects}"/>  
                                    <apex:actionSupport event="onchange" rerender="childfields"/>
                            </apex:selectList>
                     </apex:actionRegion>
                     </apex:outputPanel>                         
              </apex:pageBlockSectionItem>
            
               <apex:pageBlockSectionItem >
                  <apex:outputlabel value="Relationships:"/> 
                     <apex:outputPanel id="relationship">
                     <apex:actionRegion >      
                           <apex:selectList value="{!Relationship}" size="1">
                                    <apex:selectOptions value="{!Relationships}"/>
                            </apex:selectList>
                     </apex:actionRegion>
                     </apex:outputPanel>                          
              </apex:pageBlockSectionItem>
            
              <apex:pageBlockSectionItem >
                      <apex:outputlabel value="Fields:"/>   
                      <apex:outputPanel id="childfields">    
                        <apex:actionRegion >  
                           <apex:selectList value="{!selectedchildField}" size="1">
                                <apex:selectOptions value="{!ChildObjectFields}"/>
                            </apex:selectList>
                        </apex:actionRegion>      
                         </apex:outputPanel>      
              </apex:pageBlockSectionItem>

          </apex:pageBlockSection>
      </apex:pageBlock>
  </apex:form>
</apex:page> 
Best Answer chosen by App Development
Bhanu MaheshBhanu Mahesh
Hi,
Try below code

I did a modification on page while rendering  rerender="myFields,childobj,relationship,childfields1"
there Id of childfields section is childfields

And I did modification in getRelatedObjects and getChildObjectFields methods

Controller:
public with sharing class ConfigurationController { 
   
    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); 
    public String selectedObject {get; set;}
    public String selectedField {get; set;}
     public String selectedChildobject {get; set;}
     public String selectedchildField {get; set;}
     public String Relationship {get; set;}
     public String prevSelectedObj = '';
     
    Public ConfigurationController(){   
        selectedObject = 'Account';
        selectedChildobject = 'Account';
    }

    public List<SelectOption> getObjectNames(){
        List<SelectOption> objNames = new List<SelectOption>();
        List<String> entities = new List<String>(schemaMap.keySet());
        entities.sort();
        for(String name : entities)
        {
            objNames.add(new SelectOption(schemaMap.get(name).getDescribe().getName() ,schemaMap.get(name).getDescribe().getLabel() ));
        }
        return objNames;
     }

     public List<SelectOption> getObjectFields(){
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        Schema.SObjectType ObjectSchema = schemaMap.get(selectedObject);
        Map<String, Schema.SObjectField> fieldMap = ObjectSchema.getDescribe().fields.getMap();
        List<SelectOption> fieldNames = new List<SelectOption>();
        for (String fieldName: fieldMap.keySet()) 
        {  
            fieldNames.add(new SelectOption(fieldMap.get(fieldName).getDescribe().getLabel(),fieldMap.get(fieldName).getDescribe().getLabel()));
        }
        return fieldNames;
      } 
      
      public List<SelectOption> getRelatedObjects(){
        map<string,string> relatedObjectsMap = new map<string,string>();
        system.debug('selectedObject :'+selectedObject);
        list<Schema.Childrelationship> relatedObjectsList = Schema.getGlobalDescribe().get(selectedObject).getdescribe().getChildRelationships();
        system.debug('relatedObjectsList :'+relatedObjectsList);
        List<SelectOption> ChildobjNames = new List<SelectOption>();
        for (Schema.Childrelationship  relatedObject : relatedObjectsList) {
             if(relatedObject.getChildSObject().getDescribe().isUpdateable()
                    && 
                    relatedObject.getChildSObject().getDescribe().getKeyPrefix()!=null
                    && 
                    !relatedObject.getChildSObject().getDescribe().isCustomSetting()
                    &&
                    relatedObject.getChildSObject().getDescribe().isCreateable()
                )
                   ChildobjNames.add(new SelectOption(relatedObject.getChildSObject().getDescribe().getName(),relatedObject.getChildSObject().getDescribe().getLabel()));
                   system.debug('ChildobjNames :'+ChildobjNames);
           }
           if(selectedObject != prevSelectedObj){
            if(ChildobjNames != null && ChildobjNames.size() > 0){
                selectedChildobject = ChildobjNames[0].getValue();
            }
            else {
                selectedChildobject = '';
            }
        }
           return ChildobjNames;
    }
    
    public List<SelectOption> getRelationships(){
        map<string,string> relatedObjectsMap = new map<string,string>();
        system.debug('selectedObject :'+selectedObject );
        list<Schema.Childrelationship> relatedObjectsList = Schema.getGlobalDescribe().get(selectedObject).getdescribe().getChildRelationships();
        system.debug('relatedObjectsList :'+relatedObjectsList);
        List<SelectOption> Relationships = new List<SelectOption>();
        for (Schema.Childrelationship  relatedObject : relatedObjectsList) {
                 if(relatedObject.getChildSObject().getDescribe().isUpdateable()
                    && 
                    relatedObject.getChildSObject().getDescribe().getKeyPrefix()!=null
                    && 
                    !relatedObject.getChildSObject().getDescribe().isCustomSetting()
                    &&
                    relatedObject.getChildSObject().getDescribe().isCreateable()
                )
                   if(relatedObject.getRelationshipName() != null){  
                       Relationships.add(new SelectOption(relatedObject.getRelationshipName(),relatedObject.getRelationshipName()));
                   }     
                   system.debug('Relationships :'+Relationships); 
           }
           return Relationships;
    }
    
    public List<SelectOption> getChildObjectFields(){
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        system.debug('selectedChildobject :'+selectedChildobject);
        List<SelectOption> ChildfieldNames = new List<SelectOption>();
        if(!String.isBlank(selectedChildobject)){
            Schema.SObjectType ObjectSchema = schemaMap.get(selectedChildobject);
            Map<String, Schema.SObjectField> ChildfieldMap = ObjectSchema.getDescribe().fields.getMap();
            
            for (String ChildfieldName: ChildfieldMap.keySet()) 
            {  
                ChildfieldNames.add(new SelectOption(ChildfieldMap.get(ChildfieldName).getDescribe().getLabel(),ChildfieldMap.get(ChildfieldName).getDescribe().getLabel()));
            }
            prevSelectedObj = selectedChildobject;
        }
        return ChildfieldNames;
      } 
}

Page:
<apex:page controller="ConfigurationController" sidebar="false"> 
<apex:form > 
      <apex:pageBlock >
          <apex:pageBlockSection columns="2" title="ParentSection">

              <apex:pageBlockSectionItem >
                  <apex:outputlabel value="Object:"/> 
                      <apex:actionRegion >      
                           <apex:selectList value="{!selectedObject}" size="1">
                                    <apex:selectOptions value="{!ObjectNames}"/>
                                    <apex:actionSupport event="onchange" rerender="myFields,childobj,relationship,childfields"/>
                           </apex:selectList>
                     </apex:actionRegion>                         
              </apex:pageBlockSectionItem>

              <apex:pageBlockSectionItem >
                      <apex:outputlabel value="Fields:"/>   
                      <apex:outputPanel id="myFields">   
                        <apex:actionRegion >  
                           <apex:selectList value="{!selectedField}" size="1">
                                <apex:selectOptions value="{!ObjectFields}"/>
                            </apex:selectList>
                        </apex:actionRegion>      
                     </apex:outputPanel>
              </apex:pageBlockSectionItem>

          </apex:pageBlockSection>
          
           <apex:pageBlockSection columns="3" title="ChildSection"> 

              <apex:pageBlockSectionItem >
                  <apex:outputlabel value="ChildObjects:"/> 
                      <apex:outputPanel id="childobj">   
                      <apex:actionRegion >      
                           <apex:selectList value="{!selectedChildobject}" size="1">
                                    <apex:selectOptions value="{!RelatedObjects}"/>  
                                    <apex:actionSupport event="onchange" rerender="childfields"/>
                            </apex:selectList>
                     </apex:actionRegion>
                     </apex:outputPanel>                         
              </apex:pageBlockSectionItem>
            
               <apex:pageBlockSectionItem >
                  <apex:outputlabel value="Relationships:"/> 
                     <apex:outputPanel id="relationship">
                     <apex:actionRegion >      
                           <apex:selectList value="{!Relationship}" size="1">
                                    <apex:selectOptions value="{!Relationships}"/>
                            </apex:selectList>
                     </apex:actionRegion>
                     </apex:outputPanel>                          
              </apex:pageBlockSectionItem>
            
              <apex:pageBlockSectionItem >
                      <apex:outputlabel value="Fields:"/>   
                      <apex:outputPanel id="childfields">    
                        <apex:actionRegion >  
                           <apex:selectList value="{!selectedchildField}" size="1">
                                <apex:selectOptions value="{!ChildObjectFields}"/>
                            </apex:selectList>
                        </apex:actionRegion>      
                         </apex:outputPanel>      
              </apex:pageBlockSectionItem>

          </apex:pageBlockSection>
      </apex:pageBlock>
  </apex:form>
</apex:page>

Regards,
Bhanu Mahesh

All Answers

Bhanu MaheshBhanu Mahesh
Hi,
Try below code

I did a modification on page while rendering  rerender="myFields,childobj,relationship,childfields1"
there Id of childfields section is childfields

And I did modification in getRelatedObjects and getChildObjectFields methods

Controller:
public with sharing class ConfigurationController { 
   
    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); 
    public String selectedObject {get; set;}
    public String selectedField {get; set;}
     public String selectedChildobject {get; set;}
     public String selectedchildField {get; set;}
     public String Relationship {get; set;}
     public String prevSelectedObj = '';
     
    Public ConfigurationController(){   
        selectedObject = 'Account';
        selectedChildobject = 'Account';
    }

    public List<SelectOption> getObjectNames(){
        List<SelectOption> objNames = new List<SelectOption>();
        List<String> entities = new List<String>(schemaMap.keySet());
        entities.sort();
        for(String name : entities)
        {
            objNames.add(new SelectOption(schemaMap.get(name).getDescribe().getName() ,schemaMap.get(name).getDescribe().getLabel() ));
        }
        return objNames;
     }

     public List<SelectOption> getObjectFields(){
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        Schema.SObjectType ObjectSchema = schemaMap.get(selectedObject);
        Map<String, Schema.SObjectField> fieldMap = ObjectSchema.getDescribe().fields.getMap();
        List<SelectOption> fieldNames = new List<SelectOption>();
        for (String fieldName: fieldMap.keySet()) 
        {  
            fieldNames.add(new SelectOption(fieldMap.get(fieldName).getDescribe().getLabel(),fieldMap.get(fieldName).getDescribe().getLabel()));
        }
        return fieldNames;
      } 
      
      public List<SelectOption> getRelatedObjects(){
        map<string,string> relatedObjectsMap = new map<string,string>();
        system.debug('selectedObject :'+selectedObject);
        list<Schema.Childrelationship> relatedObjectsList = Schema.getGlobalDescribe().get(selectedObject).getdescribe().getChildRelationships();
        system.debug('relatedObjectsList :'+relatedObjectsList);
        List<SelectOption> ChildobjNames = new List<SelectOption>();
        for (Schema.Childrelationship  relatedObject : relatedObjectsList) {
             if(relatedObject.getChildSObject().getDescribe().isUpdateable()
                    && 
                    relatedObject.getChildSObject().getDescribe().getKeyPrefix()!=null
                    && 
                    !relatedObject.getChildSObject().getDescribe().isCustomSetting()
                    &&
                    relatedObject.getChildSObject().getDescribe().isCreateable()
                )
                   ChildobjNames.add(new SelectOption(relatedObject.getChildSObject().getDescribe().getName(),relatedObject.getChildSObject().getDescribe().getLabel()));
                   system.debug('ChildobjNames :'+ChildobjNames);
           }
           if(selectedObject != prevSelectedObj){
            if(ChildobjNames != null && ChildobjNames.size() > 0){
                selectedChildobject = ChildobjNames[0].getValue();
            }
            else {
                selectedChildobject = '';
            }
        }
           return ChildobjNames;
    }
    
    public List<SelectOption> getRelationships(){
        map<string,string> relatedObjectsMap = new map<string,string>();
        system.debug('selectedObject :'+selectedObject );
        list<Schema.Childrelationship> relatedObjectsList = Schema.getGlobalDescribe().get(selectedObject).getdescribe().getChildRelationships();
        system.debug('relatedObjectsList :'+relatedObjectsList);
        List<SelectOption> Relationships = new List<SelectOption>();
        for (Schema.Childrelationship  relatedObject : relatedObjectsList) {
                 if(relatedObject.getChildSObject().getDescribe().isUpdateable()
                    && 
                    relatedObject.getChildSObject().getDescribe().getKeyPrefix()!=null
                    && 
                    !relatedObject.getChildSObject().getDescribe().isCustomSetting()
                    &&
                    relatedObject.getChildSObject().getDescribe().isCreateable()
                )
                   if(relatedObject.getRelationshipName() != null){  
                       Relationships.add(new SelectOption(relatedObject.getRelationshipName(),relatedObject.getRelationshipName()));
                   }     
                   system.debug('Relationships :'+Relationships); 
           }
           return Relationships;
    }
    
    public List<SelectOption> getChildObjectFields(){
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        system.debug('selectedChildobject :'+selectedChildobject);
        List<SelectOption> ChildfieldNames = new List<SelectOption>();
        if(!String.isBlank(selectedChildobject)){
            Schema.SObjectType ObjectSchema = schemaMap.get(selectedChildobject);
            Map<String, Schema.SObjectField> ChildfieldMap = ObjectSchema.getDescribe().fields.getMap();
            
            for (String ChildfieldName: ChildfieldMap.keySet()) 
            {  
                ChildfieldNames.add(new SelectOption(ChildfieldMap.get(ChildfieldName).getDescribe().getLabel(),ChildfieldMap.get(ChildfieldName).getDescribe().getLabel()));
            }
            prevSelectedObj = selectedChildobject;
        }
        return ChildfieldNames;
      } 
}

Page:
<apex:page controller="ConfigurationController" sidebar="false"> 
<apex:form > 
      <apex:pageBlock >
          <apex:pageBlockSection columns="2" title="ParentSection">

              <apex:pageBlockSectionItem >
                  <apex:outputlabel value="Object:"/> 
                      <apex:actionRegion >      
                           <apex:selectList value="{!selectedObject}" size="1">
                                    <apex:selectOptions value="{!ObjectNames}"/>
                                    <apex:actionSupport event="onchange" rerender="myFields,childobj,relationship,childfields"/>
                           </apex:selectList>
                     </apex:actionRegion>                         
              </apex:pageBlockSectionItem>

              <apex:pageBlockSectionItem >
                      <apex:outputlabel value="Fields:"/>   
                      <apex:outputPanel id="myFields">   
                        <apex:actionRegion >  
                           <apex:selectList value="{!selectedField}" size="1">
                                <apex:selectOptions value="{!ObjectFields}"/>
                            </apex:selectList>
                        </apex:actionRegion>      
                     </apex:outputPanel>
              </apex:pageBlockSectionItem>

          </apex:pageBlockSection>
          
           <apex:pageBlockSection columns="3" title="ChildSection"> 

              <apex:pageBlockSectionItem >
                  <apex:outputlabel value="ChildObjects:"/> 
                      <apex:outputPanel id="childobj">   
                      <apex:actionRegion >      
                           <apex:selectList value="{!selectedChildobject}" size="1">
                                    <apex:selectOptions value="{!RelatedObjects}"/>  
                                    <apex:actionSupport event="onchange" rerender="childfields"/>
                            </apex:selectList>
                     </apex:actionRegion>
                     </apex:outputPanel>                         
              </apex:pageBlockSectionItem>
            
               <apex:pageBlockSectionItem >
                  <apex:outputlabel value="Relationships:"/> 
                     <apex:outputPanel id="relationship">
                     <apex:actionRegion >      
                           <apex:selectList value="{!Relationship}" size="1">
                                    <apex:selectOptions value="{!Relationships}"/>
                            </apex:selectList>
                     </apex:actionRegion>
                     </apex:outputPanel>                          
              </apex:pageBlockSectionItem>
            
              <apex:pageBlockSectionItem >
                      <apex:outputlabel value="Fields:"/>   
                      <apex:outputPanel id="childfields">    
                        <apex:actionRegion >  
                           <apex:selectList value="{!selectedchildField}" size="1">
                                <apex:selectOptions value="{!ChildObjectFields}"/>
                            </apex:selectList>
                        </apex:actionRegion>      
                         </apex:outputPanel>      
              </apex:pageBlockSectionItem>

          </apex:pageBlockSection>
      </apex:pageBlock>
  </apex:form>
</apex:page>

Regards,
Bhanu Mahesh
This was selected as the best answer
Himanshu ParasharHimanshu Parashar
Hi,

This is what I see and it is working as expected.

User-added image

Can you please add steps to reproduce your problem.

 
App DevelopmentApp Development
its working great..thanks a lot