Как назначить установщику в Salesforce, для которого требуется параметр индекса, например список‹›?

В контроллере у меня есть два значения:

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

ListValue инициализируется в конструкторе и добавляется несколько строк. В этот момент значения я могу ссылаться на них с помощью {!StringValue} и {!ListValue[1]} на странице VisualForce. В частности, основное внимание уделяется списку — я даже могу добавлять псевдоконстанты (геттеры) в качестве индексов, делая {!ListValue[nameIndex]} допустимой ссылкой.

Однако я столкнулся с исключением при попытке установить значение списка вместо простого строкового значения.

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

Исключение составляет java.lang.ClassCastException: java.lang.String cannot be cast to common.formula.FormulaFieldReference

Я думаю, что понимаю основы проблемы — Salesforce не может создать ссылку на установщик, который включает параметр индекса (это означает, что можно ссылаться только на установщики, которые принимают один параметр).

Есть ли способ обойти это, или мне просто нужно создать огромное количество переменных ListValue1, ListValue2 и связанного с ними кода?


person David    schedule 02.11.2011    source источник


Ответы (2)


Это хак, но он избавляет вас от необходимости создавать десятки переменных.

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

Затем в вашем контроллере:

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

Вы поняли идею.

person jkraybill    schedule 04.11.2011

Я никогда не сталкивался со способом сделать это в том стиле, который вы запрашиваете, я бы предположил, что для этого проще всего было бы объединить значения, которые вы хотите, в один параметр, а затем разделить их обратно. внутри контроллера.

Вы можете найти подходящий способ сделать это с помощью <apex:repeat>, но я не уверен в вашем полном варианте использования.

person Matt Lacey    schedule 02.11.2011