Заполнение SelectList объектом

Я пытаюсь создать класс, который будет заполнять список множественного выбора в зависимости от того, какие параметры URL-адреса передаются.

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

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

VisualForce.Page

<apex:page controller="PopUp">

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

Controller class:

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

person c14kaa    schedule 23.04.2013    source источник


Ответы (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;}

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

person JCD    schedule 23.04.2013