Условный вывод информации на Visualforce странице (rendered attribute)
Сразу начну с небольшого рассуждения. Согласно требованиям salesforce, для создания Visualforce page нужно максимально использовать собственные теги <apex: ...></apex:...>. Список этих тегов достаточно внушительный и они позволяют перекрыть все потребности программиста и верстальщика. Но как показывает практика даже программисты с опытом не знают всех apex тегов, тем более что говорить про верстальщиков, привыкших работать с html. Поэтому я советую, использовать теги apex только при необходимости получить нужный функционал от salesforce. Впоследствии это очень помогает, если появится необходимость допилить страницу с помощью javascript или jquery.
Теперь к теме статьи.
За условный вывод элемента на страницу отвечает замечательный атрибут rendered.
Несмотря на на то что практически каждый apex тег имеет атрибут данный, я предпочитаю оборачивать элементы или блоки элементов тегом apex:outputPanel и уже работать с ним как с единым целым.
Вот три замечательных примера, которые я постоянно использую в своей работе
<apex:outputPanel id="thePanel_DIV" layout="block">...</apex:outputPanel>
<apex:outputPanel id="thePanel_SPAN" layout="inline">...</apex:outputPanel>
Разберем по порядку
layout="block" - преобразует apex:outputPanel в div
layout="inline" (по-умолчанию) - преобразует apex:outputPanel в span
layout="none" - просто выводит содержимое не во что не оборачивая. Удобно использовать когда необходимо добавить на страницу условную логику не изменяя конечный вид самой страницы.
УСЛОВНЫЙ ВЫВОД
атрибут rendered="true/false" , где true - выводим элемент и все его содержимое, false - не выводим.
вот как изменится код выше если надо скрыть все наши блоки
В браузере вы естественно ничего не увидите.
В качестве значения атрибута rendered можно использовать boolean переменные из контроллера или формулы, которые возвращают значения true или false.
Теперь к теме статьи.
За условный вывод элемента на страницу отвечает замечательный атрибут rendered.
Несмотря на на то что практически каждый apex тег имеет атрибут данный, я предпочитаю оборачивать элементы или блоки элементов тегом apex:outputPanel и уже работать с ним как с единым целым.
Вот три замечательных примера, которые я постоянно использую в своей работе
<apex:outputPanel id="thePanel_DIV" layout="block">...</apex:outputPanel>
<apex:outputPanel id="thePanel_SPAN" layout="inline">...</apex:outputPanel>
<apex:outputPanel id="thePanel_NONE" layout="none">...</apex:outputPanel>
Реальный пример из тестового орга
<apex:outputPanel id="thePanel1" layout="block">My div</apex:outputPanel>
<apex:outputPanel id="thePanel2" layout="inline">My div</apex:outputPanel>
<apex:outputPanel id="thePanel3" layout="none">My div</apex:outputPanel>
<apex:outputPanel id="thePanel4">My div</apex:outputPanel>
А вот как это все выглядит в браузере
<div id="j_id0:thePanel1">My div</div>
<span id="j_id0:thePanel2">My div</span>
My div
<span id="j_id0:thePanel4">My div</span>
Разберем по порядку
layout="block" - преобразует apex:outputPanel в div
layout="inline" (по-умолчанию) - преобразует apex:outputPanel в span
layout="none" - просто выводит содержимое не во что не оборачивая. Удобно использовать когда необходимо добавить на страницу условную логику не изменяя конечный вид самой страницы.
УСЛОВНЫЙ ВЫВОД
атрибут rendered="true/false" , где true - выводим элемент и все его содержимое, false - не выводим.
вот как изменится код выше если надо скрыть все наши блоки
<apex:outputPanel id="thePanel1" layout="block" rendered="false" >My div</apex:outputPanel>
<apex:outputPanel id="thePanel2" layout="inline" rendered="false" >My div</apex:outputPanel>
<apex:outputPanel id="thePanel3" layout="none" rendered="false" >My div</apex:outputPanel>
<apex:outputPanel id="thePanel4" rendered="false" >My div</apex:outputPanel>
В браузере вы естественно ничего не увидите.
В качестве значения атрибута rendered можно использовать boolean переменные из контроллера или формулы, которые возвращают значения true или false.
Полезно, не знал что можно менять итог отработки <apex: .. - подобных элементов в формируемый и отображаемый браузером код страницы. Думаю будет полезно сказать, что используя указанное выше, можно при помощи javascript обращаться к объектам, что очень расширяет круг возможных к реализации операций. Спасибо за статью!
ОтветитьУдалить