[Resolvido]if e else no outputText do primefaces

Pessoal, preciso comparar alguns valores dentro de um outputtext de um datatable, antes esta fazendo assim:

<p:column> <f:facet name="header"> <h:outputText value="Tipo" /> </f:facet> <h:outputText value="#{c.tipo==0?'Tipo 1':'Tipo 2'}" /> </p:column>
Mas agora preciso comprar 5 tipos no mesmo campo, como devo fazer?

Você pode usar jstf com o switch/case e criar o outputText com cada valor.

Ou usar uma expressão de método que talvez retorne o valor correto não sei.

[quote=lele_vader]Você pode usar jstf com o switch/case e criar o outputText com cada valor.

Ou usar uma expressão de método que talvez retorne o valor correto não sei.[/quote]
como ficaria o código eu fosse usar o “case” ?

Olá Luciano, bom dia!

Você está fazendo:

<p:column>  
    <f:facet name="header">  
        <h:outputText value="Tipo" />  
    </f:facet>  
    <h:outputText value="#{c.tipo==0?'Tipo 1':'Tipo 2'}" />  
</p:column>  

Neste caso, você pode fazer assim:

<p:column>  
    <f:facet name="header">  
        <h:outputText value="Tipo" />  
    </f:facet>  
    <h:outputText value="Tipo 1" rendered="#{c.tipo==0}" />  
    <h:outputText value="Tipo 2" rendered="#{c.tipo==1}" />  
    <h:outputText value="Tipo 3" rendered="#{c.tipo==2}" />  
    <h:outputText value="Tipo 4" rendered="#{c.tipo==3}" />  
</p:column>  

Ou, caso estes valores possam sofrer alterações, você deve fazer isso diretamente no ManagedBean, criando um método que vai retornar o valor

<p:column>  
    <f:facet name="header">  
        <h:outputText value="Tipo" />  
    </f:facet>  
    <h:outputText value="#{meuBean.texto}" />  
</p:column>  
public MeuBean ... {

   public String getTexto() {
      switch (expr) {
            case 1:
                return "Tipo 1";
                break;
            case 2:
                return "Tipo 2";
                break;
            // ....
      }
      return "";
   }

}

Ou, ainda, caso sua intenção seja fazer um “de-para”, você pode criar um JSF Converter para este seu domínio (Tipo).Veja como criar um JSF Converter neste link: http://infocomputacao.blogspot.com.br/2009/04/criando-convertconversores-no-jsf.html

<p:column>  
    <f:facet name="header">  
        <h:outputText value="Tipo" />  
    </f:facet>  
    <h:outputText value="#{c.tipo}" converter="meuConverter" />  
</p:column>  

Abraço,

Verdade
Dá para fazer usando o renderer e com o tipo.

Mas eu acho melhor fazer uma expressão de método para retornar o valor.
Imagina se tem 100 diferentes ?

Se eu criar um metodo para receber o nome do tipo realmente funciona, mas no momento preciso fazer a alteração apenas na pagina.No caso desse código, ele iria criar varios campos com os valores diferentes ou iria exibir apenas um campo de acordo com a comparação?

<p:column> <f:facet name="header"> <h:outputText value="Tipo" /> </f:facet> <h:outputText value="Tipo 1" rendered="#{c.tipo==0}" /> <h:outputText value="Tipo 2" rendered="#{c.tipo==1}" /> <h:outputText value="Tipo 3" rendered="#{c.tipo==2}" /> <h:outputText value="Tipo 4" rendered="#{c.tipo==3}" /> </p:column>

1 curtida

Olá, boa tarde!

Ele só vai renderizar o outputText em que a condição de “rendered” for verdadeira, por exemplo:

<h:outputText value="Tipo 1" rendered="#{c.tipo==0}" /> 

O output acima só será renderizado (exibido) quando c.tipo for igual a 0.

Abraço,

Brigadão galera, resolvido