Condicional no jsf

24 respostas
S

Olá pessoal, estou com um problema e até agora não encontrei solução
Bem, é sabido que o rendered do JSF renderiza condicionalmente algo.
Porém o que preciso é trocar o css caso uma condição seja feita.
ou seja se "prioridade(que é um inteiro) > 5 um outputLabel deve receber um id, que no css terá um estilo específico.

preciso que quando a prioridade for maior que 5 haja um preenchimento atrás do outputlabel.
O que podem sugerir?

grande abraços, fiquem com Deus, muito obrigado.

24 Respostas

D

Bom dia,

vc ja tentou usar o <c:if test="">

L

Não acredito que seja bom usar JSTL…Você pode fazer isso no seu bean ou propriamente dito utilizando rendered. Um exemplo.

<h:graphicImage rendered="#{perfilUsuario.sexo == '1'}" value="/resources/imagens/ele.jpg" style="width: 20px; height: 20px; border-style: none;" title="Remover Usu&#225;rio Cadastrado" /> <h:graphicImage rendered="#{perfilUsuario.sexo == '2'}" value="/resources/imagens/ela.jpg" style="width: 20px; height: 20px; border-style: none;" title="Remover Usu&#225;rio Cadastrado" />

Caso o meu sexo == 1 apresenta a imagem ele

Caso o meu sexo == 2 aperesenta a imagem ela.

D

tem razão, usando o rendered fica muito melhor

S

rendered="#{perfilUsuario.sexo == ‘1’}"

S
Já tentei usar <c:if, porém a lista também tem de ser criada com jstl, o que não é nada elegantemas, como pensava em usar DataTable e alguns recursos de paginação do jquery, queria manter a mesma estruturabeleza, usarei render, porém tenho que testar a condição "se prioridade > 5 até 9, farei

<h:outputLabel id=“prioritario” redered #{empresa.prioridade > 5}/>

e

<h:outputLabel id=“naoprioritario” redered #{empresa.prioridade >< 5}/>
A

não coloque a lógica na view!
http://www.rponte.com.br/2009/08/27/managed-beans-nao-complique-simplifique/

S

O.k.
tudo bem, Felipe, mas como fazer isso, já que obtenho o valor a partir de uma lista de um objeto?

S
public List&lt;Empresa&gt; buscarPorNome(ActionEvent event) {
		if (this.listaPesquisa == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			if (empresa.getPrioridade() &gt; 5) {
				prioritario = &quot;destaque&quot;;
			}
			prioritario = &quot;semDestaque&quot;;
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}

		return this.listaPesquisa;
	}
&lt;div id="#{empresaBean.prioritario}"
Felipe, tentei resolver assim, porém sem sucesso, o que acontece, é que o valor é sempre o mesmo.
S
Tentei fazer assim, embora o valor seja constante, não funcionou, ele não muda.
public List&lt;Empresa&gt; buscarPorNome(ActionEvent event) {
		if (this.listaPesquisa == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			if (empresa.getPrioridade() &gt; 5) {
				prioritario = &quot;destaque&quot;;
			}
			prioritario = &quot;semDestaque&quot;;
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}

		return this.listaPesquisa;
	}
&lt;div id="#{empresaBean.prioritario}"

Resolvi assim, obrigado, Felipe.>

E
smnj:
public List&lt;Empresa&gt; buscarPorNome(ActionEvent event) {
		if (this.listaPesquisa == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			if (empresa.getPrioridade() &gt; 5) {
				prioritario = &quot;destaque&quot;;
			}
			prioritario = &quot;semDestaque&quot;;
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}

		return this.listaPesquisa;
	}
&lt;div id=&quot;#{empresaBean.prioritario}&quot;

Resolvi assim, obrigado, Felipe.>

Não falta um else aí?
if (empresa.getPrioridade() &gt; 5) {  //Se a prioriadade for maior que 5
                prioritario = &quot;destaque&quot;;  
            }         //Sem else, prioritario receberá sempre SemDestaque
            prioritario = &quot;semDestaque&quot;;
Coloque o
prioritario = &quot;semDestaque&quot;;
no início do método ou então um else no segundo if.
S
Não seria assim, seria?
public List&lt;Empresa&gt; buscarPorNome(ActionEvent event) {
		if (this.listaPesquisa == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			if (empresa.getPrioridade() &gt;=5) {
				prioritario = &quot;destaque&quot;;
			} else {
				prioritario = &quot;semDestaque&quot;;
			}
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}

		return this.listaPesquisa;
	}
S

Mas até agora, está só semDestaque.

E

Isso. Ou também colocar o prioritario=“semDestaque” no inicio do método, ai não precisaria do else, pois só receberia “destaque” se entrasse no if.

S

Tentei isso, sem sucesso.
Precisava que cada registro da listagem pudesse ter ou não destaque, porém tudo está "semDestaque".

public List&lt;Empresa&gt; buscarPorNome(ActionEvent event) {
		prioritario = &quot;semDestaque&quot;;
		if (this.listaPesquisa == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			if (empresa.getPrioridade() &gt;= 5) {
				prioritario = &quot;destaque&quot;;
			}
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}

		return this.listaPesquisa;
	}
S

Não está funcionando, está com o valor constantemente “semDestaque”

S

ManagedBean, caso necessário:

package com.portal.web;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import com.portal.empresa.Empresa;
import com.portal.empresa.EmpresaRN;

@ManagedBean
@RequestScoped
public class EmpresaBean {

	private Empresa empresa = new Empresa();
	private EmpresaRN empresaRN = new EmpresaRN();
	private List&lt;Empresa&gt; empresas;
	private List&lt;Empresa&gt; listaPesquisa;
	private List&lt;Empresa&gt; lista;
	private String destinoSalvar;
	private String prioritario;

	public String novo() {
		this.destinoSalvar = "empresaSucesso";
		this.empresa = new Empresa();
		return "empresa";
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		if (isEmpresaCadastrada(empresa)) {
			FacesMessage facesMessage = new FacesMessage("Digite um nome diferente de empresa, esta j&#65533; est&#65533; cadastrada.");
			context.addMessage(null, facesMessage);
			return null;
		}
		EmpresaRN empresaRN = new EmpresaRN();
		empresaRN.salvar(this.empresa);
		return "empresaSucesso";
	}

	public String editar() {
		return "/admin/empresa";

	}

	public String excluir() {
		EmpresaRN empresaRN = new EmpresaRN();
		empresaRN.excluir(this.empresa);
		this.lista = null;
		return null;
	}

	public List&lt;Empresa&gt; autocompleteEmpresa(String query) {
		List&lt;Empresa&gt; queryResults = new ArrayList&lt;Empresa&gt;();
		if (this.empresas == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			this.empresas = empresaRN.complete();
		}
		for (Empresa e : empresas) {
			if (e.getNome().startsWith(query)) {
				queryResults.add(e);
			}
		}
		return queryResults;
	}

	public List&lt;Empresa&gt; getLista() {
		if (this.lista == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			this.lista = empresaRN.listar();
		}

		return this.lista;
	}

	public List&lt;Empresa&gt; buscarPorNome(ActionEvent event) {
		if (this.listaPesquisa == null) {
			EmpresaRN empresaRN = new EmpresaRN();
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}
		if (empresa.getPrioridade() &lt; 5) {
			prioritario = "destaque";
		}if ( empresa.getPrioridade()&gt;5){
			prioritario = "semDestaque";
		}
		return this.listaPesquisa;
	}

	public boolean isEmpresaCadastrada(Empresa empresa) {
		return empresaRN.verificaEmpresa(empresa.getNome());
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public EmpresaRN getEmpresaRN() {
		return empresaRN;
	}

	public void setEmpresaRN(EmpresaRN empresaRN) {
		this.empresaRN = empresaRN;
	}

	public List&lt;Empresa&gt; getEmpresas() {
		return empresas;
	}

	public void setEmpresas(List&lt;Empresa&gt; empresas) {
		this.empresas = empresas;
	}

	public String getDestinoSalvar() {
		return destinoSalvar;
	}

	public void setDestinoSalvar(String destinoSalvar) {
		this.destinoSalvar = destinoSalvar;
	}

	public List&lt;Empresa&gt; getListaPesquisa() {
		return listaPesquisa;
	}

	public void setListaPesquisa(List&lt;Empresa&gt; listaPesquisa) {
		this.listaPesquisa = listaPesquisa;
	}

	public void setLista(List&lt;Empresa&gt; lista) {
		this.lista = lista;
	}

	public String getPrioritario() {
		return prioritario;
	}

	public void setPrioritario(String prioritario) {
		this.prioritario = prioritario;
	}

}
A

vc tem que fazer assim no seu objeto Empresa

public String getCssDestaque() { return getPrioridade() =< 5 ? "destaque" : "semDestaque" ; }

e na sua view vc chama o empresa.cssDestaque…
certo??

S

Cara, vou fazer isso no managed Bean, ou onde?

A

onde eu acabei de falar

alves.Felipe:
vc tem que fazer assim no seu objeto Empresa

S

bem, acho que é isso, mas não aceitou o igual.(=):

public String getCssDestaque() {
		return empresa.getPrioridade() &lt; 5 ? "destaque" : "semDestaque";
	}
A

aa sim, é <= e não =< como eu tinha feito…
mas entendeu esta forma de fazer?

S

Não funcionou:

java.lang.NullPointerException

S

Tentei tanto no bean como no manegadBean, nada.

S

Sim, entendi a forma de fazer, porém está vindo nulo.

Criado 9 de julho de 2012
Ultima resposta 11 de jul. de 2012
Respostas 24
Participantes 6