当我尝试在控制器扩展程序中保存记录时,我收到了“转换错误设置值”。该页面看起来像我期望的那样,但是当我选择一个或多个复选框时,它会给出我的错误。我没看到这里的错误。谢谢你的帮助。
页面:
<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;
}
答案 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()方法。您需要一个书籍列表 - 使用值()。