0

При попытке сохранить запись в моем контроллере я получаю значение параметра «Значение ошибки преобразования». Страница выглядит так, как я ожидал бы, но когда я выбираю один или несколько флажков, она дает мне эту ошибку. Я не вижу, что такое ошибка. Спасибо за помощь.VisualForce 'Conversion Error value value' - проблема с привязкой с 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

Я думаю, что вы должны размещать больше кода, и это не ясно, что именно вы хотите достичь:

  • Какова ваша фактическая функция «command», я не вижу ни одного < apex: commandButton action = "{! Fun}" .. > и не одна функция от контроллера выглядит как «public void fun()» или «public PageReference fun()». Я особенно хочу сказать, что не принимаю входных аргументов.

  • Ваш код не компилируется, я заменил Book__c с счетом и покрытием с контактом, но, например, «черный список» переменный в

    если (! Blacklist.contains (п)) {

не определено. Я могу предположить, что это то же самое, что и «результат», но вы знаете ... мусор, мусор. Нам может понадобиться только часть, которую вы пропустили;) Также - можете ли вы реплицировать проблему, используя стандартные объекты Salesforce, чтобы нам было легче протестировать?

  • «selectedBooks» читается на странице, но вы никогда не установить значение? Даже для самых простых selectedBooks = new String [] ... Неинициализированная переменная a является решением similar problem, обсуждаемым на доске объявлений Salesforce.

  • Просто случайная мысль - для bookIDs() функции, которые вы могли бы быть лучше, используя Карта < Id, Book__c > или Карта < Id, String >. Первый может быть даже создан непосредственно из [SELECT Id, Name FROM Book], если вам это нужно. Вы хотите установить идентификаторы - используйте метод keySet(). Вам нужен список книг - используйте значения().

+0

Проблема заключалась в том, что список никогда не был инстанцирован, как вы указываете. Смущает, что в любом другом контексте это приведет к исключению нулевого указателя, поскольку я пытаюсь разыменовать переменную, которая ничего не указывает. – Ben