Регистрация  |  Вход

Как посчитать кол-во итераций Repeat только на VF странице

Здравствуйте!

ситуация такая:

на стандартном листе (view) записей поставил кнопку чекнув в ее настройках Display Checkboxes (for Multi-Record Selection).

после этого на следущей VF странице (куда мы приходим с кнопки) все чекнутые пользователем записи доступны в переменной !selected (просто магия!) при стандартном контроллере (то есть кастомного или расширенного контроллера нет). Только разметка, где Apex:repeat разматывает массив !selected.

Но, это ПДФ-нутая страница. И там нужно ставить разделение страниц (например так: <div style="page-break-after: always" />, иначе дизайн может поплыть.

И мне нужно ставить этот Див после 20-го повторения Рипита, а я не знаю как "словить" этот момент только средствами доступными в VF разметке. Пока в Рипите просто ограничил кол-во Rows.

Наверное придется расширять станд контроллер. Но как там получить эти записи в !selected?

Пока это не срочный вопрос, но как говорится, есть над чем подумать...

Здравствуйте! 

ситуация такая:

на стандартном листе (view) записей поставил кнопку чекнув в ее настройках  [i]Display Checkboxes (for Multi-Record Selection)[/i].

после этого на следущей VF странице (куда мы приходим с кнопки) все чекнутые пользователем записи доступны в переменной [b]!selected[/b] (просто магия!) при стандартном контроллере (то есть кастомного или расширенного контроллера нет). Только разметка, где Apex:repeat разматывает массив !selected.

Но, это ПДФ-нутая страница. И там нужно ставить разделение страниц (например так: [i]<div  style="page-break-after: always" />[/i], иначе дизайн может поплыть.

И мне нужно ставить этот Див после 20-го повторения Рипита, а я не знаю как "словить" этот момент только средствами доступными в  VF разметке. Пока в Рипите просто ограничил кол-во Rows.

Наверное придется расширять станд контроллер. Но как там получить эти записи в !selected?

Пока это не срочный вопрос, но как говорится, есть над чем подумать...

Все очень просто
Есть такая конструкция:

<apex:variable var="rowNum" value="{!1}"/>
<apex:repeat value="{!myCollection}" var="item">
...
<apex:variable var="rowNum" value="{!rowNum + 1}"/>
</apex:repeat>

Объявляем переменную прямо на VF странице и потом в цикле repeat увеличиваем на единицу.

Как дальше использовать переменную для того чтобы разбить пачку на пачки по 20 не составит труда
Подробности можно можно найти здесь
http://blog.jeffdouglas.com/2010/04/02/visualforce-row-counter-for-iteration-components/

Все очень просто :)

Есть такая конструкция:

[code]
<apex:variable var="rowNum" value="{!1}"/>
<apex:repeat value="{!myCollection}" var="item">
    ...
    <apex:variable var="rowNum" value="{!rowNum + 1}"/>
</apex:repeat>
[/code]

Объявляем переменную прямо на VF странице и потом в цикле repeat увеличиваем на единицу. 

Как дальше использовать переменную для того чтобы разбить пачку на пачки по 20 не составит труда :)

Подробности можно можно найти здесь 
[url]http://blog.jeffdouglas.com/2010/04/02/visualforce-row-counter-for-iteration-components/[/url]

Ну сегодня просто день чудес! Меня приятно удивил !selected, но это было не последней хорошей новостью.


А оператор % в формулах работает??

буду пробовать вот так:

<apex:pageBlock rendered="{ (!rowNum%20=0), true, false }">
<div style="page-break-after: always" />
</apex:pageBlock>

Ну сегодня просто день чудес! Меня приятно удивил !selected, но это было не последней хорошей новостью.


А оператор [b]%[/b] в формулах работает??

буду пробовать вот так:

<apex:pageBlock rendered="{  (!rowNum%20=0), true, false }"> 
 <div  style="page-break-after: always" />
 </apex:pageBlock>

Все вроде готово. Пришлось немного пободаться с формулами.

Вот это задается в начале странице:

<apex:variable var="rowNum" value="{!0}"/>

и обратите внимание, что отсчет начинается с нуля, иначе вы будите удивляться, почему на первой странце элеметов на один меньше, чем на последующих.

Далее прямо в самом Рипите (после выводимых элеметов) ставите:

<apex:variable var="rowNum" value="{!rowNum + 1}"/>

<apex:pageBlock rendered="{! IF(MOD(rowNum,20)=0,true, false)}" >

Вот тут указана формула MOD(n1,n2). В отличие от оператора "%" (который в формулах не работает) она вовращает остаток от деление первого аргумета на второй, а не значение после запятой в результате деления. Но в нашем случае механизм использования аналогичен с "%" - ловим "0".

И как указано в CSS руководствах при использовании сл стиля:

<div style="page-break-before: always" >

див не должен быть абсолютно пустым.

Пока все.

PS:
Но я уже чувствую, что попросят выбранные в !selected записи сортировать в момент вывода (на PDF страницу) по какому то полю. И тут придется думать как это сделать в пределах только VF странице, или как-то получать доступ к !selected в расширении стандартного контроллера.

Все вроде готово. Пришлось немного пободаться с формулами.

Вот это задается в начале странице:

[code]<apex:variable var="rowNum" value="{!0}"/>[/code]

и обратите внимание, что отсчет начинается с нуля, иначе вы будите удивляться, почему на первой странце элеметов на один меньше, чем на последующих. 

Далее [b]прямо в самом Рипите[/b] (после выводимых элеметов) ставите:
[code]   <apex:variable var="rowNum" value="{!rowNum + 1}"/>
   
   <apex:pageBlock rendered="{! IF(MOD(rowNum,20)=0,true, false)}" > [/code]

Вот тут указана формула MOD(n1,n2). В отличие от оператора "%" (который в формулах не работает) она вовращает остаток от деление первого аргумета на второй, а не значение после запятой в результате деления. Но в нашем случае механизм использования аналогичен с "%" - ловим "0".

И как указано в CSS руководствах при использовании сл стиля:

<div style="page-break-before: always" >

 див не должен быть абсолютно пустым.

Пока все.

PS:
Но я уже чувствую, что попросят выбранные в !selected записи сортировать в момент вывода (на PDF страницу) по какому то полю. И тут придется думать как это сделать в пределах только VF  странице, или как-то получать доступ к !selected в расширении стандартного контроллера.