Olá Pessoal,
Estou com uma dúvida, existe a possibilidade de utilizar a condicional IF no JSP com o JSF?
Quero fazer como no Velocity, algo +/- assim:
#IF(condicional)
//código
#END
[]´s
Olá Pessoal,
Estou com uma dúvida, existe a possibilidade de utilizar a condicional IF no JSP com o JSF?
Quero fazer como no Velocity, algo +/- assim:
#IF(condicional)
//código
#END
[]´s
A proposta do JSF não é a mesma do JSP.
Programar páginas JSP tradicional é mais ou menos como gerar um arquivo de texto.
Programar páginas com JSF é mais parecido com construir uma interface desktop via drag and drop.
Com JSF/JSP dá pra jogar com os atributos rendered dos componentes UI
Com JSF/Facelets dá para usar algumas tags da biblioteca JSTL core, detre elas, o <c:if>
Não sei se é isso que vc quer … mas pra usar código java no JSP, basta inserir as Tags <% %> .
Exemplo de uma index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>CBCR</title>
</head>
<body>
<h1></h1>
<%
if (request.isUserInRole("Lan"))
response.sendRedirect("combatLan/index.jsp");
if (request.isUserInRole("Curriculo"))
response.sendRedirect("curriculo/index.jsp");
else
out.print("Menu não definido");
%>
</body>
</html>
no JSF essas condições são aplicadas diretamente nas propriedades do objeto, por exemplo:
<h:selectOneMenu value="#{bean.estado}" rendered="#{bean.exibeEstado}">
<f:selectItems value="#{bean.listaEstados}" />
</h:selectOneMenu>
no jsp, em vez rendered="#{bean.exibeEstado}" seria:
<c:if test='${bean.exibeEstado}'>
<select>...
Bém pessoal isso também pode ajudar:
<f:verbatim rendered="#{item.ativo == true}">
<h:outputText value="Sim" />
</f:verbatim>
<f:verbatim rendered="#{item.ativo == false}">
<h:outputText value="Não" />
</f:verbatim>
amigo, você pode fazer a condição direto, assim:
<h:outputText rendered="#{item.ativo == true}" value="Sim" />
<h:outputText rendered="#{item.ativo == false}" value="Não" />
Eu acho que fica mais arrumadinho
Estou com o problema ao usar rendered. Tenho um componente facelet que gostaria de usar para incluir na tela campos de qualquer tipo (texto, data, senha, número).
<ui:fragment rendered="#{cc.attrs.password}">
<h:inputSecret id="#{cc.attrs.id}" value="#{cc.attrs.value}" onkeypress="#{cc.attrs.onkeypress}"
onkeyup="#{cc.attrs.onkeyup}" onblur="#{cc.attrs.onblur}" required="#{cc.attrs.required}"
maxlength="#{cc.attrs.maxlength}" rendered="#{cc.attrs.render}"
readonly="#{cc.attrs.readonly}" disabled="#{cc.attrs.disabled}"/>
</ui:fragment>
<ui:fragment rendered="#{not cc.attrs.password}">
<h:inputText id="#{cc.attrs.id}" value="#{cc.attrs.value}" onkeypress="#{cc.attrs.onkeypress}"
onkeyup="#{cc.attrs.onkeyup}" onblur="#{cc.attrs.onblur}" required="#{cc.attrs.required}"
maxlength="#{cc.attrs.maxlength}"
readonly="#{cc.attrs.readonly}" disabled="#{cc.attrs.disabled}"/>
</ui:fragment>
Ao rodar esse código, tenho o erro:
[color=red]A ID de componente form:login:login já foi encontrada na visualização.[/color]
Alguém sabe me ajudar? O c:if não funciona também.
id="#{cc.attrs.id}"
Esse is não é o id do objeto e sim o id do componente, não podem ter 2 componentes na tela com o mesmo id
Por isso que eu queria usar o if, pois eu preciso listar o componente apenas uma vez.
Carinha, dá pra usar o if sim, você está usando facelets, certo? Vários métodos da tag library padrão do struts funcionam. Inclusive <c:if> e <c:choose>. Ó só:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" xmlns:f="http://java.sun.com/jsf/core"repare que tem que adicionar o xmlns:c aí de cima para chamar as tag libraries.
Daí você pode colocar algo assim no código:
<c:if test="${ex != null }">Boom deu boom, mas eu peguei!</c:if>
As tags <c: que reconhecidamente funcionam, e que testei no JBoss 7 são: <c:choose>, <c:when>, <c:otherwise>, <c:if>. A tag <c:catch> aparentemente está com pau, mas nada na especificação de Java Server Faces diz que não deve ser suportada.
Pessoalmente, eu uso <c:choose> para colocar informações internacionalizadas personalizadas no meu site, ou seja, que não são simples traduções palavra-a-palavra.
<ui:define name="content">
<h1>#{messages['#TODO: tipicamente o mesmo que o título']}</h1>
<c:choose>
<c:when test="#{preferences.language=='pt'}" >
Material em portguês
</c:when>
<c:otherwise>
English material
</c:otherwise>
</c:choose>
Havia dado erro no meu facelet componente quando tentei primeira vez, ai não usei mais. Vou tentar denovo à noite.
[quote=jo-souza]amigo, você pode fazer a condição direto, assim:
<h:outputText rendered="#{item.ativo == true}" value="Sim" />
<h:outputText rendered="#{item.ativo == false}" value="Não" />
Eu acho que fica mais arrumadinho [/quote]
Valeu Jô, sou novato em JSF e a dica funcionou maravilhosamente bem.
[quote=jo-souza]amigo, você pode fazer a condição direto, assim:
<h:outputText rendered="#{item.ativo == true}" value="Sim" />
<h:outputText rendered="#{item.ativo == false}" value="Não" />
Eu acho que fica mais arrumadinho [/quote]
Funciona perfeito e mto prático o código…
Mto obrigado…
fióte, assim é melhor:
<h:outputLabel value="#{i.stAtivo == true ? 'sim': 'não'}" />