首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sobject填充SelectList

使用sobject填充SelectList
EN

Stack Overflow用户
提问于 2013-04-24 01:10:45
回答 1查看 1.3K关注 0票数 0

我正在尝试创建一个类,它将根据传入的URL参数填充多选列表。

我遇到麻烦了。slectlist从不呈现,但是,通过查看调试器,我可以看到找到了记录,并且应该填充它。

我错过了什么愚蠢的东西吗?

VisualForce.Page

代码语言:javascript
复制
<apex:page controller="PopUp">

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

控制器类:

代码语言:javascript
复制
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;
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 01:57:31

我认为你混淆了VF页面,因为它实际上有两个getter方法(一个是你添加的,另一个是你告诉控制器通过在变量声明中指定get;来创建自己的):

代码语言:javascript
复制
public list<SelectOption> selectListOptions {get;set;}

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

它看起来不像是在填充selectListOptions anywhere,所以VF页面会看到这一点,并且不会向您的选择列表中添加任何选项。VF页面只有在没有为您的变量找到getter的情况下才会调用getSelectListOptions(),所以像这样修改selectListOptions声明,这样就没问题了:

代码语言:javascript
复制
public List<SelectOption> selectListOptions {set;}

事实上,您的页面看起来不应该有权限来设置它,所以如果您愿意,您也可以删除setter。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16175251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档