0

当我尝试在控制器扩展中保存记录时,出现“转换错误设置值”。该页面看起来是我期望的方式,但是当我选择一个或多个复选框时,它会给我那个错误。我没有看到错误在这里。谢谢您的帮助。Visualforce的转换错误设置值 - 与selectCheckboxes的绑定问题

页:

  <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

我认为你必须张贴更多的代码,它不是明确你希望达到什么:

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

  • 您的代码无法编译,我把它换成Book__c与帐户和覆盖接触,但例如在

    “黑名单” 变量如果(!blacklist.contains(N)){

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

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

  • 只是一个随机的思考 - bookIDs()函数,你可以使用地图<标识,Book__c >更好或地图<标识,字符串>。如果需要,第一个甚至可以直接从[SELECT Id,Name FROM Book]实例化。您需要一组ID - 之后使用keySet()方法。你想要一本书的清单 - 使用values()。

+0

问题在于列表从未实例化,正如您指出的那样。令人困惑的是,在所有其他情况下,这会抛出一个空指针异常,因为我试图解引用一个指向无关的变量。 – Ben 2010-06-30 00:45:12