Objetivos

Referências complementares

Pré-Requisitos

Conceito

EL ou Expression Language é uma linguagem script que permite acessar componentes Java em páginas JSP.  

O Lumis dá suporte à utilização de EL, facilitando a implementação de serviços a partir do acesso a alguns objetos do Portal dentro do arquivo douidefinition.xml.

Sintaxe

O padrão que identifica um trecho EL é ‘${object}’ onde ‘object’ é a referência para um Java Bean. Em casos onde é necessário acessar atributos de um objeto, a notação utilizada segue o padrão:

 ‘${object.property}’.

Exemplo:

<filter id="mainArticleTrue" fieldId="mainArticle" value="${param.lumItemId == null ? true : false}" hidden="true" />

O exemplo acima atribui true ao filtro mainArticleTrue caso o parâmetro do request lumItemId seja null.

Objetos Implícitos

Os seguintes objetos implícitos estão disponíveis para as expressões EL no douidefinition:

Exemplos:

O exemplo a seguir atribui o parâmetro do request cujo nome é ‘titulo’ ao valor do filtro cujo id é ‘title’:

<filter fieldId="title" id="filtro2" value="${param.titulo}" operator="like"/>

Resolução de ELs fora do escopo dos controles

O processo de renderização (render) de uma interface de serviço Doui pode ser esquematizado conforme os passos a seguir:

image002.jpg

O processamento das ações (processAction) de uma interface de serviço Doui pode ser esquematizado conforme os passos a seguir:

image004.jpg

Fora dos controles, tanto na renderização quanto no processamento das ações, as ELs presentes no douidefinition.xml são resolvidas no momento da criação do DouiContext.

Durante essa etapa de criação do DouiContext, é gerada a definição da instância da interface de serviço, resultado da união da definição da interface de serviço no douidefinition.xml com a definição no nível do serviço dos sources por ela utilizados.

Neste momento, em que a definição da interface de serviço é resolvida, também são resolvidas as ELs presentes.

É importante notar que a definição do serviço no douidefinition.xml pode ser utilizada em outros processos do Portal além da renderização das interfaces e do processamento das ações, como, por exemplo, o processo de indexação de conteúdos. Sendo assim, a utilização de ELs fora do escopo de uma interface não é recomendável, uma vez que a definição pode ser utilizada num processo que não prevê a resolução de ELs, causando efeitos indesejáveis.

Resolução de ELs dentro do escopo dos controles

A figura abaixo representa um esquema simplificado do ciclo de vida dos controles Doui, apresentando os principais passos deste ciclo. Do lado esquerdo estão os passos do processo de renderização de uma interface Doui e do lado direito, em abóbora, os principais passos da renderização de um controle:

image008.jpg

A resolução de ELs no ciclo de vida dos controles ocorre logo antes do último passo da renderização de um controle, o método setRenderData. Sendo assim, apenas os dados da definição de um controle lidos neste passo poderão utilizar ELs.

Objetos implícitos no escopo dos controles

Os seguintes objetos implícitos estão disponíveis para as expressões EL no escopo dos controles:

Exemplos:

O exemplo a seguir avalia o campo domain de um source cujo id é domain:

<control:lum_div style="${sources.domain.data.domain == 'lum_global' || sources.domain.data.domain == null ? '':'display:none'}">
                                                           <control:lum_label dataId="groupTypeId" />
</control:lum_div>

Neste exemplo, o atributo style de um controle lum_div é decidido com base no valor do campo domain de um source cujo id também é domain. Se o campo domain tiver o valor ‘lum_global’ ou for nulo, o atributo style terá valor vazio, caso contrário será ‘display:none’.

O exemplo a seguir acessa o controle cujo id é “principalList”. A partir deste controle, acessa um canal e seu nome (neste caso, a implementação do controle permite recuperar uma instância de ChannelConfig): 

<control:lum_propertyPage title="STR_CHANNEL; ${controls.principalList.channel.name}" icon="lumis/portal/client/images/Access.gif">
 
...

Quando não é possível resolver uma EL no escopo de controle com base nos objetos implícitos existentes, essa EL é interpretada como um dado do source default.

Assim, a EL ‘${campo}’ seria equivalente a ‘${sourceDefault.data.campo}’ onde sourceDefault é o source default.

Exemplo:

<control type="lum_selectPageTemplate" id="pageTemplateId" defaultChannelId="${parentId}"/>

 Neste exemplo, a EL ‘${parentId}’ referencia o campo parentId do source default.

Boas Práticas no Uso de ELs no douidefinition.xml

As ELs devem ser utilizadas apenas no escopo de uma interface de serviço. Fora desse escopo, a definição presente no douidefinition.xml pode ser utilizada em outros processos do Portal além da renderização e processamento de ações da interface e esses processos não necessariamente prevêem a resolução de ELs.

Atualizado em 18.01.2011