2013-04-23 31 views
0

我想創建一個類,將取決於傳遞什麼URL參數多選擇列表的。填充的SelectList用的sObject

有麻煩林填充。但是,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

我認爲你具有兩個基本getter方法(你添加一個混亂的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;} 

事實上,它看起來並不像你頁面應該可以設置這個,所以如果你想的話,你可以移除setter。