0

Je reçois une 'Valeur de réglage d'erreur de conversion' lorsque j'essaie d'enregistrer un enregistrement dans mon extension de contrôleur. La page ressemble à ce à quoi je m'attendrais, mais quand je sélectionne une ou plusieurs cases à cocher, cela donne mon erreur. Je ne vois pas quelle est l'erreur ici. Merci pour l'aide.Visualforce 'Valeur de réglage d'erreur de conversion' - problème de liaison avec selectCheckboxes

La page:

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

Le contrôleur:

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

Répondre

-1

Je pense que vous devez poster plus de code et il est clair pas ce que vous voulez exactement à atteindre:

  • Quelle est votre fonction "command" actuelle, je ne vois pas < apex: commandButton action = "{! Fun}" .. > et pas une seule fonction du contrôleur ressemble à "public void fun()" ou "public PageReference fun()" - je veux surtout dire la partie sur la prise de pas d'arguments d'entrée.

  • Votre code ne compile pas, je l'ai remplacé Book__c avec compte et couverture avec contact, mais par exemple la variable "liste noire" dans

    if (! Blacklist.contains (n)) {

est indéfini. Je peux supposer que c'est la même chose que "résultat", mais vous savez ... garbage in, garbage out. Nous pourrions avoir besoin de la partie que vous avez omise;) Aussi - pouvez-vous reproduire le problème en utilisant des objets Salesforce standard afin qu'il soit plus facile de tester pour nous?

  • "selectedBooks" est lu dans la page, mais vous ne valeur définir? Même pas le plus simple selectedBooks = new String [] ... La variable non initialisée a est la solution similar problem discutée sur le forum de discussion de Salesforce.

  • Juste une pensée au hasard - pour bookIDs() fonction que vous pourriez être mieux à l'aide Carte < Id, Book__c > ou Carte < Id, String >. Le premier peut même être instancié directement à partir de [SELECT Id, Name FROM Book] si vous en avez besoin. Vous voulez un ensemble d'identifiants - utilisez ensuite la méthode keySet(). Vous voulez une liste de livres - utilisez les valeurs().

+0

Le problème était que la liste n'a jamais été instanciée, comme vous l'indiquez. Confus, en ce que dans tous les autres contextes cela jetterait une exception de pointeur nul comme j'essaye de déréférencer une variable qui pointe vers rien. – Ben