Visualforce «Значение параметра Ошибка преобразования» - проблема с привязкой с помощью selectCheckboxes - PullRequest
0 голосов
/ 30 июня 2010

При попытке сохранить запись в расширении моего контроллера я получаю «Значение параметра ошибки преобразования». Страница выглядит так, как я ожидал, но когда я выбираю один или несколько флажков, она выдает эту ошибку. Я не вижу, в чем здесь ошибка. Спасибо за помощь.

Страница:

          <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 голосов
/ 30 июня 2010

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

  • Какова ваша действительная функция "command", я не вижу никаких и ни одна функция из контроллера не выглядит как "public void fun () "или" public PageReference fun () "- я имею в виду, в частности, отсутствие входных аргументов.

  • Ваш код не компилируется, я заменил Book__c на Account и Coverage на Contact, но, например, на переменную "blacklist" в

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

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

  • «выбранные книги» читаются на странице, но вы никогда не устанавливали значение? Даже для самых простых selectedBooks = new String [] ... Неинициализированная переменная a является решением аналогичной проблемы , обсуждаемой на доске объявлений Salesforce. Просто случайная мысль - для функции bookIDs () вам лучше использовать Map или Map . Первый может даже быть создан непосредственно из [SELECT Id, Name FROM Book], если вам это нужно. Вы хотите установить идентификаторы - используйте метод keySet () впоследствии. Вы хотите список книг - используйте значения ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...