Условный вывод информации на 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>

<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.

Комментарии

  1. Полезно, не знал что можно менять итог отработки <apex: .. - подобных элементов в формируемый и отображаемый браузером код страницы. Думаю будет полезно сказать, что используя указанное выше, можно при помощи javascript обращаться к объектам, что очень расширяет круг возможных к реализации операций. Спасибо за статью!

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Начало работы, первые шаги, hello world в Salesforce