0

当我尝试在控制器扩展中保存记录时,我收到“转换错误设置值”。该页面看起来像我期望的那样,但是当我选择一个或多个复选框时,它给出了我的错误。我没有看到这里的错误。谢谢您的帮助。

这页纸:

          <apex:pageBlockSectionItem >
                <apex:OutputLabel value="Assigned Areas of Coverage" for="books" />
                <apex:selectCheckboxes value="{!selectedBooks}"
                    layout="pageDirection" id="books">
                    <apex:selectOptions value="{!options}" />
                </apex:selectCheckboxes>
            </apex:pageBlockSectionItem>

控制器:

public String[] selectedBooks {get; set;}

public List<SelectOption> options 
{
    get
    {
        List<SelectOption> result = new List<SelectOption>();
        List<String> optionNames = bookNames(books);
        optionNames.sort();

        for(String n : optionNames){
            if(!blacklist.contains(n)){
                result.add(new SelectOption(n, n));
            }
        }

        return result;
    }
}

private List<Book__c> books 
{
    get 
    { if (books == null){
        books =   [select Id, Name from Book__c];
        }
        return books;

    }
    set;    
}

private List<String> bookNames(List<Coverage__c> coverage)
{
    List<String> result = new List<String>();

    for(Coverage__c c : coverage){
        result.add(c.Book__r.Name);
    }

    return result;
}

private List<String> bookNames(List<Book__c> books)
{
    List<String> result = new List<String>();

    for(Book__c b : books){
        result.add(b.Name);
    }

    return result;
}

private List<Id> bookIDs(List<String> bookNames)
{
    List<Id> result = new List<Id>();
    Set<String> bookNamesSet = new Set<String>(bookNames);

    for(Book__c b : books){
        if(bookNamesSet.contains(b.Name)){
            result.add(b.Id);
        }
    }

    return result;
} 
4

1 回答 1

-1

我认为您必须发布更多代码,并且不清楚您到底希望实现什么:

  • 您的实际“命令”功能是什么,我没有看到任何 <apex:commandButton action="{!fun}" ... > 并且控制器中没有一个功能看起来像“public void fun()”或“public PageReference fun()" - 我特别指的是不接受输入参数的部分。

  • 您的代码无法编译,我已将 Book__c 替换为 Account 并将 Coverage 替换为 Contact,但例如“黑名单”变量

    if(!blacklist.contains(n)){

未定义。我可以假设这与“结果”相同,但你知道......垃圾进,垃圾出。我们可能只需要您省略的部分;)另外 - 您可以使用标准 Salesforce 对象复制问题,以便更容易为我们测试吗?

  • 在页面中读取“selectedBooks”但您从未设置值?即使是最简单的 selectedBooks = new String[]... 未初始化的变量 a 也是Salesforce 留言板上讨论的类似问题的解决方案。

  • 只是一个随机的想法 - 对于 bookIDs() 函数,您可能会更好地使用 Map<Id, Book__c> 或 Map<Id, String>。如果需要,第一个甚至可以直接从 [SELECT Id, Name FROM Book] 实例化。您想要一组 ID - 之后使用 keySet() 方法。你想要一个书籍列表 - 使用 values()。

于 2010-06-29T23:09:55.170 回答