Skip to content

Initializer

ayslanms edited this page Feb 16, 2016 · 1 revision

Componente para inicializar os objetos Lazy do Hibernate/JPA na view. Este componente evita o famoso LazyInitializationException ao fazer referência a um objeto lazy na view.

Atributos

Nome Valor Padrão Tipo Descrição
value Expression Language Caso seja informado, inicializa a expressão informada.
entityManager javax.persistence.EntityManager Indica o entity manager a ser utilizado. Ao fazer isso a configuração EntityManagerFactory não é necessária.
property value String Indica o atributo do componente pai que será inicializado. Por padrão é inicializado o atributo value.

Utilização

<h:outputText value="#{bean.entity.lazyAtribute.description}" >  
    <x:initializer/>  
</h:outputText>  

Para recuperar o entity manager e inicializar o objeto o xpert-framework precisa que seja definido o EntityManagerFactory e que seja devidamente configurado, isso pode ser visto na sessão Configurando o EntityManagerFactory. Essa configuração pode ser ignorada uma vez que definido o EntityManager do componente como mostrado abaixo.

Informando o Entity Manager no initializer

Caso não possua a configuração mencionada, é possível ainda usar o componente informando o Entity Manager. Isso não exige configuração, exige apenas que o esse EntityManager seja informado:

<h:outputText value="#{bean.entity.lazyAtribute.description}" >  
  <x:initializer entityManager="#{bean.entityManager}"/>  
</h:outputText>

Inicializar qualquer propriedade do componente pai

Por padrão o initializer busca inicializar o atributo value do componente pai, mas é possível indicar qual atributo do componente pai ele irá processar bastando indicar o atributo property. No exemplo abaixo o atributo header do panel será inicializado:

<p:panel header="#{bean.entity.lazyAtribute.description}" >  
  <x:initializer property="header"/>  
</p:panel>  

Inicializar qualquer expressão

É possível ainda inicializar qualquer objeto informando a expressão do objeto através do atributo “value”. Isso torna mais dinâmica sua utilização, pois independe do componente pai. A baixo a expressão #{bean.entity.lazyAtribute.description} está sendo informada para ser inicializada:

<x:initializer value="#{bean.entity.lazyAtribute.description}" />  
<h:outputText value="#{bean.entity.lazyAtribute.description}" />  

O exemplo acima é equivalente a:

<h:outputText value="#{bean.entity.lazyAtribute.description}" >  
  <x:initializer/>  
</h:outputText>  

Inicializar múltiplas expressões

Outra opção disponível é a inicialização de múltiplas expressões:

<h:outputText value="#{bean.entity.lazyAtribute} - #{bean.entity.lazyAtribute2 }" >  
  <x:initializer/>  
</h:outputText>  

Clone this wiki locally