Uno de las características que nos pueden dar flexibilidad a la hora de trabajar con JSF es el uso de atributos rendered . Estos nos permiten mostrar o ocultar controles dependiendo del valor de una expresión de JSF Expression Languaje. Supongamos que tenemos un formulario sencillo en JSF que incluye un inputText con el precio del portatil que queremos comprar.
Vamos a ver el código del fichero JSF:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> </h:head> <h:body> <h:form> <h:inputText value="#{beanPortatil.coste}"/> <h:commandButton id="boton" value="aceptar" action="destino.xhtml"/> </h:form> </h:body> </html>
Una vez hemos construido el formulario vamos a mostrar el código del managedBean.
package com.arquitecturajava.bean; import javax.faces.bean.ManagedBean; @ManagedBean public class BeanPortatil { private int coste; public int getCoste() { return coste; } public void setCoste(int coste) { this.coste = coste; } }
Por último tenemos que construir la página de destino en la cual dependiendo del precio del portatil nos avisará de si podemos comprarlo o no.
Vamos a ver el código fuente de esta página :
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> </h:head> <h:body> <h:form> El portatil cuesta :<h:outputText value="#{beanPortatil.coste}"/> Euros <h:outputText value="Compratelo" rendered="#{beanPortatil.coste lt 1000}"/> <h:outputText value="No te lo puedes comprar" rendered="#{beanPortatil.coste gt 1000}"/> </h:form> </h:body> </html> <pre>
Una vez construido el código invocamos al formulario y rellenamos el campo de coste.
y como resultado final obtendremos :
Hemos conseguido que aparezca este mensaje gracias a que las etiquetas outputText incluian los siguientes atributos rendered :
<h:outputText value="Compratelo" rendered="#{beanPortatil.coste lt 1000}"/> <h:outputText value="No te lo puedes comprar" rendered="#{beanPortatil.coste gt 1000}"/>
Recordemos de JSF Expression Language que en la expresión #{beanPortatil.coste lt 1000} lt significa “less than” y que en la expresión “#{beanPortatil.coste gt 1000}” gt significa “greater than”.
Buenas Cecilio, tengo un problema con una JSF, en ella renderizo ciertos componentes segun un tipo de usuario, esto lo consigo con el atributo rendered y un valor boleano que indica el tipo de usuario; el problema es que cuando se abre una pagina para un tipo de usuario con sus componentes correspondientes y se abre una segunda página con un tipo de usuario diferente y sus respectivos componentes en la primera página dejan de funcionar los componentes que no se hayan renderizado en la segunda. Agradezco tu atención.
Da la sensacion de que tienes un problema de sesiones o algo asi? . Te estas logeando dos veces?
Hola Cual es la diferencia entre outputLabel y outputText de primefaces, gracias
No lo he usado con prime pero en principio uno renderiza una caja de texto y el otro una etiqueta
Qué bueno. Es un if encubierto.
Gracias por el aporte.
PD: Estoy buscando información acerca de todas las etiquetas h, f y ui con sus posibles atributos pero no encuentro más que las más usadas. Tendrás algún link donde estén todas de forma completa?
Gracias de nuevo!
No , ya lo siento 🙁
Excelente!
gracias
Aùn que es un ejemplo bastante descriptivo, sigo sin entender la funciòn real y terminologìa de este atributo.
Básicamente, en la expresi6EL tienes que devolver un valor lógico y dependiendo de lo que este te devuelva entonces se mostrará o no el componente que tiene el atributo “rendered”.
[…] artículos relacionados : JSF Rendered Attributes , JSF vs Spring […]
Como se llama el libro?? Soy muy nueva en todo este tema de la programacion en Java y necesito aprender mucho del tema
Es el que tienes en mi pagina principal del blog para bajar . Es de temas de arquitectura .. básico básico no es 🙁
Cecilio excelente libro lo estoy usando para una materia orientada a aplicaciones web con java y la verdad me dio buenos resultados. Saludos
excelente , felicitaciones por su blog, ahora, el rendered esa es su única funcionalidad o se pueden hacer mas cosas.
saludos
se pueden hacer mas cosas ,bastantes mas 🙂 . Es un atributo muy flexible
Excelente sitio sr. Cecilio Alvarez….soy nuevo en JEE, y su libro y este sitio me han parecido GENIALES. Déjeme felicitarlo por tan estupendo trabajo.
Gracias por tus comentarios 🙂