2013-04-23 3 views
0

Я пытаюсь создать класс, который заполнит многопрофильным SelectList в зависимости от того, что URL передаются параметры в.SelectList с Заполнение SObject

Im возникают проблемы. Однако slectlist никогда не просматривает отладчик, я вижу, что записи найдены и что они должны заполняться.

Я пропустил что-то глупое?

VisualForce.Page

<apex:page controller="PopUp"> 

<apex:form > 
    <apex:selectList value="{!objectType}" multiselect="true"> 
     <apex:selectOptions value="{!SelectListOptions}"/> 
    </apex:selectList> 
</apex:form> 
класс

Контроллер:

public with sharing class PopUp { 

public sObject objParameter {get;set;} 
public string fldParameter {get;set;} 
public string queryType {get;set;} 
public static string objName{get;set;} 
public list<SelectOption> selectListOptions {get;set;} 
public static list<string> TEST {get;set;} 
public String[] objectType= new String[]{}; 

public PopUp(){ 

    objName = ApexPages.currentPage().getParameters().get('obj'); 
    sObject dynObject = Schema.getGlobalDescribe().get(objName).newSObject() ; 
    objParameter = dynObject; 

    fldParameter = ApexPages.currentPage().getParameters().get('fld'); 
    String queryType = ApexPages.currentPage().getParameters().get('qt'); 

    system.debug('***objParameter: ' + objParameter); 
    system.debug('***fldParameter: ' + fldParameter); 

    //List<selectOption> L = getPicklistValues(objParameter, fldParameter, queryType); 
} 

public static list<SelectOption> getPicklistValues(SObject obj, String fld, String queryType) 
{ 
    list<SelectOption> options = new list<SelectOption>(); 

    if(queryType == 'soql'){ 

     string query = 'select ' + fld + ' from ' + objName; 
     system.debug('***query: ' + query); 

     List<sObject> dynList = Database.query(query); 
     system.debug('***dynList: ' + dynList); 

     for(integer i=0;i< dynList.size();i++){ 

      string fldValue = string.valueof(dynList[i].get(fld)); 
      system.debug('***fldValue: ' + fldValue); 

      options.add(new SelectOption(fldValue,fldValue)); 
      TEST.add(fldValue); 
     } 
    } 

    system.debug('***options: ' + options); 
    return options; 

} 

public List<selectOption> getSelectListOptions() { 
    return getPicklistValues(objParameter, fldParameter, queryType); 
} 

public String[] getObjectType() 
{ 
    return objectType; 
} 

public void setObjectType(String[] objectType) 
{ 
    this.objectType= objectType; 
} 

ответ

1

Я думаю, что вы путаете страницу VF, имея по существу два метода геттер (тот, который вы добавили, и тот, который вы сказали контроллеру, чтобы создать себя, указав в объявлении переменной get;):

public list<SelectOption> selectListOptions {get;set;} 

public List<selectOption> getSelectListOptions() { 
    return getPicklistValues(objParameter, fldParameter, queryType); 
} 

Не похоже, что вы заполняете selectListOptions в любом месте, поэтому страница VF видит это и не добавляет никаких параметров в ваш список выбора. Страница VF будет вызывать только getSelectListOptions(), если он не находит поглотитель для переменной, поэтому изменить selectListOptions декларацию, как это так, и вы должны быть хорошо:

public List<SelectOption> selectListOptions {set;} 

На самом деле, это не выглядит, как ваш страница должна иметь доступ, чтобы установить это, чтобы вы могли также удалить установщик, если хотите.

Смежные вопросы