2011-11-02 19 views
5

En un controlador I tienen dos valores:Cómo asignar a un setter en Salesforce que requiere un parámetro de índice, como una lista <>?

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

El ListValue se inicializa en el constructor y se añaden varias cadenas. En este punto de un valor, puedo referirme a estos con {! StringValue} y {! ListValue [1]} en una página de VisualForce. La lista en particular es el foco: incluso puedo agregar pseudo-constantes (getters) como índices, haciendo de {! ListValue [nameIndex]} una referencia válida.

Sin embargo, me he encontrado con una excepción al intentar establecer un valor de lista en lugar de un valor de cadena simple.

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

La excepción es java.lang.ClassCastException: java.lang.String cannot be cast to common.formula.FormulaFieldReference

Creo entender los conceptos básicos del problema - Salesforce no puede crear una referencia de la moda que incluye un parámetro de índice (es decir, sólo los emisores que tienen un solo parámetro puede ser referenciado)

¿Hay alguna forma de evitar esto, o simplemente tengo que crear una gran cantidad de variables ListValue1, ListValue2 y el código asociado?

Respuesta

3

Es un truco, pero evita tener que crear docenas de variables.

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

Luego, en su controlador:

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

se entiende la idea.

0

Nunca me he encontrado con una forma de hacer esto en el estilo que está solicitando, sugiero que para hacer esto, lo más fácil sea concatenar los valores que desee en un parámetro y luego divídalos nuevamente dentro del controlador.

Puede encontrar una forma adecuada de hacerlo con <apex:repeat>, pero no estoy seguro de su caso de uso completo.

Cuestiones relacionadas