Ошибка: значение индекса 9 недопустимо. Должно быть от 0 до 8 - PullRequest
1 голос
/ 26 декабря 2011

Это моя vf-страница, я получаю 9 записей в BadgeController в conList, то есть conList[0] до conList[8].

Я использую переменные first и second в качествеиндекс в список.

Я увеличиваю значение переменной на 2 в каждой вершине: повторяю, она отлично работает от 0 до 2.

Но когда переменная становится 9, она показывает ошибку вроде:

Значение индекса 9 недопустимо.Должно быть в диапазоне от 0 до 8.

Как предотвратить приращение переменной?

Как прервать выполнение кода в условии if .. else?

<apex:page standardController="Event__c" extensions="BadgeController" showHeader="false" sidebar="false" renderAs="pdf">

<html>
<head>
</head>
<center>

<apex:variable var="first" value="{!0}" id="id3"/>
<apex:variable var="second" value="{!1}" id="id4"/>

<apex:repeat value="{!conList}" >

<apex:variable var="first" value="{!first+ 2}" id="id1"/>
<apex:variable var="second" value="{!second+ 2}" id="id2"/>



<table><tr><td>

<table BORDER="2" RULES="NONE" FRAME="BOX">
<tr>
<td>
<table height="100px" width="300px" border="1" align="center" cellspacing="30">

<tr>
<td><center><apex:outputField value="{!conList[first].AccountContact__r.FirstName}"/></center></td>
</tr>

</table>
</td>

</tr>

</table></td>

<td></td>
<td>

<table BORDER="2" RULES="NONE" FRAME="BOX">
<tr>
<td>
<table height="100px" width="300px" border="1" align="center" cellspacing="30">


<tr>
<td><center><apex:outputField value="{!conList[second].AccountContact__r.FirstName}"/></center></td>
</tr>


</table>
</td>

</tr>

</table>
</td></tr></table> <br></br><br></br>

</apex:repeat>
</center>
</html>

</apex:page>

1 Ответ

1 голос
/ 27 декабря 2011

Я не совсем уверен, что вы спрашиваете здесь, но похоже, что вы просто хотите отобразить чередующиеся значения в списке. Это работа для Apex (или, возможно, JavaScript, если вы действительно не хотите кодировать какой-либо Apex, хотя вам следует познакомиться с Apex, если вы планируете некоторое время оставаться на Force.com). В Apex вы можете делать со списками все, что вам нравится, и отображать все, что вам нужно для отображения без , тесно связывая вашу презентацию с вашей бизнес-логикой. Из Руководства разработчика Visualforce:

Примечание: apex: переменная не поддерживает переназначение внутри итерационный компонент, такой как apex: dataTable или apex: repeat. результат этого, например, увеличение переменной apex: как counter, не поддерживается и не определено.

Итак, вот пример Apex, который создает два списка чередующихся элементов для отображения в Visualforce:

public with sharing class Sample 
{
    public List<Contact> conListOne {get; private set;}
    public List<Contact> conListTwo {get; private set;}

    public Sample()
    {
        conListOne = new List<Contact>();
        conListTwo = new List<Contact>();

        Contact[] tmpConList = [SELECT Id, Name, Account.Name FROM Contact LIMIT 10];
        Integer i = 0;
        while(i < tmpConList.size())
        {
            conListOne.add(tmpConList[i]);
            if((i + 1) < tmpConList.size())
            {
                conListTwo.add(tmpConList[i+1]);
            }
            i += 2;
        }
    }
}

Теперь вы можете отображать два разных списка в Visualforce, которые имеют четные / нечетные номера строк из исходного SOQL:

<apex:pageBlockTable value="{!conListOne}" var="item">
</apex:pageBlockTable>
<apex:pageBlockTable value="{!conListTwo}" var="item">
</apex:pageBlockTable>

Или просто измените Apex для создания единого списка с любым порядком строк, который вы пожелаете, и отобразите его.

Надеюсь, это поможет.

...