2011-11-02 3 views
5

In un controller che hanno due valori:Come assegnare un setter in Salesforce che richiede un parametro indice, come un elenco <>?

public List<String> StringValue {get; set;} 
public List<String> ListValue {get; set;} 

Il ListValue viene inizializzato nel costruttore e si aggiungono diverse stringhe. A questo punto in un valore posso riferirmi a questi con {! StringValue} e {! ListValue [1]} in una pagina VisualForce. L'elenco in particolare è l'obiettivo: posso persino aggiungere pseudo-costanti (getter) come indici, rendendo {! ListValue [nomeIndice]} un riferimento valido.

Tuttavia, ho riscontrato un'eccezione durante il tentativo di impostare anziché un valore di stringa semplice.

<apex:param value="123" assignTo="{!ListValue[1]}" /> 

L'eccezione è java.lang.ClassCastException: java.lang.String cannot be cast to common.formula.FormulaFieldReference

Credo di capire le basi del problema - Salesforce non è possibile creare un riferimento setter che include un parametro indice (che significa solo setter che prendono un singolo parametro può essere referenziato).

C'è un modo per aggirare questo, o devo solo creare una quantità massiccia di ListValue1, variabili ListValue2 e codice associato?

risposta

3

È un hack, ma evita di dover creare dozzine di variabili.

<apex:param value="1:123" assignTo="{!smartAssigner}" /> 

Poi nel controller:

public void setSmartAssigner(String myval) { // parse the colon, set list value appropriately. 

si ottiene l'idea.

0

Non ho mai trovato un modo per farlo nello stile che stai richiedendo, ti suggerirei di fare in modo che la cosa più semplice fosse concatenare i valori che vuoi in un parametro e poi dividerli di nuovo all'interno del controller.

È possibile trovare un modo adeguato per farlo con <apex:repeat> ma non sono sicuro del caso di utilizzo completo.