Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Zé Roberto

Como acessar o Bean ligado a um atributo de UIComponent?

Recommended Posts

Eu também fiz essa pergunta no stackoverflow, mas vamos lá..

 

Eu preciso acessar o objeto Bean usado na expressão EL de um UIComponent.

 

Por exemplo, nesta amostra de código:

 

xhtml:

<h:form>
   <f:view>
       <p:selectBooleanButton value="#{baseBean.selected}" onLabel="Instalar" offLabel="Ignorar" onIcon="ui-icon-check" offIcon="ui-icon-close">
           <f:validator validatorId="baseValidator.items" />
       </p:selectBooleanButton>
       <p:commandButton type="submit" value="Submit"
           actionListener="#{baseBean.process}"
           ajax="false" />
   </f:view>
</h:form>

 

java:

@FacesValidator("baseValidator.items")
public static class BaseValidator implements Validator
{

   @Override
   public void validate(FacesContext context, UIComponent component,
           Object value) throws ValidatorException {
       ValueReference reference = component.getValueExpression("value").getValueReference(context.getELContext());
       Object o1 = reference.getBase();
       Object o2 = reference.getProperty();
       return; //break point here
   }

}

 

Quando o command button é apertado o BaseValidator.validate é executado, eu preciso obter o objeto baseBean usado em:

<p:selectBooleanButton value="#{baseBean.selected}">

 

Meu código atualmente está lançando NullPointerException porque getValueReference está retornando nulo. Como eu pego aquele objeto dentro do método validate?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi direito é isso que quer fazer:

<h:form>     
  <f:view>         
 <p:selectBooleanButton value="#{baseBean.selected}" onLabel="Instalar" offLabel="Ignorar" onIcon="ui-icon-check" offIcon="ui-icon-close" validator= "baseValidator.items">                    
<f:attribute id="a escolha" name="a escolha" value="#{seubean.suaPropriedade}" />
</p:selectBooleanButton>         
<p:commandButton type="submit" value="Submit" actionListener="#baseBean.process}" ajax="false" />             
</f:view> 
</h:form>

E no seu beanValidator:

 

 

 
@FacesValidator("baseValidator.items")
public static class BaseValidator implements Validator
{

   @Override
   public void validate(FacesContext context, UIComponent component,
           Object value) throws ValidatorException {
       ValueReference reference = component.getValueExpression("value").getValueReference(context.getELContext());
Tipo attributo = component.getAttributes().get("seuAtributo");
       Object o1 = reference.getBase();
       Object o2 = reference.getProperty();
       return; //break point here
   }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.