Visualforce的“转换错误设置值” - 与selectCheckboxes的绑定问题

时间:2010-06-29 21:20:21

标签: model-view-controller data-binding salesforce visualforce

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

页面:

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

1 个答案:

答案 0 :(得分:-1)

我认为你必须发布更多代码,而且还不清楚你想要实现的目标:

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

  • 您的代码无法编译,我已将Account__c替换为Account with Coverage with Contact,但例如

    中的“blacklist”变量

    如果(!blacklist.contains(N)){

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

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

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