Mostrar condicionalmente componentes JSF
Primero, soy nuevo en Java EE y tengo una sólida experiencia en desarrollo de ASP .NET. Revisé la red y es posible que me lo pierda, pero parece que no hay tutoriales simples y directos sobre cómo podría conectar la clase de backing bean a los componentes JSF.
Un buen ejemplo es este, actualmente estoy intentando crear una página JSF donde hay un conjunto de enlaces como barra de menú y un conjunto de formularios. Lo que planeo hacer es que, al hacer clic en un enlace, se mostrará un formulario particular.
En ASP.NET, podría recuperar fácilmente el elemento y luego configurar el atributo para que se pueda mostrar. Me pregunto si hay una manera fácil (diablos, incluso cualquier forma) de hacer esto en JSF.
Los formularios ya están en la página, es solo cuestión de configurar el atributo "renderizar" en verdadero cuando hago clic en un enlace en particular.
Sí, usa el rendered
atributo.
<h:form rendered="#{some boolean condition}">
Por lo general, lo vincula al modelo en lugar de dejar que el modelo tome el componente y lo manipule.
P.ej
<h:form rendered="#{bean.booleanValue}" />
<h:form rendered="#{bean.intValue gt 10}" />
<h:form rendered="#{bean.objectValue eq null}" />
<h:form rendered="#{bean.stringValue ne 'someValue'}" />
<h:form rendered="#{not empty bean.collectionValue}" />
<h:form rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:form rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
Tenga en cuenta la importancia de los operadores EL basados en palabras clavegt
, como ge
, le
y lt
en lugar de >
, >=
y como corchetes angulares <=
y son caracteres reservados en XML. Consulte también estas preguntas y respuestas relacionadas: Error al analizar XHTML: el contenido de los elementos debe consistir en datos de caracteres o marcas bien formadas .<
<
>
En cuanto a su caso de uso específico, supongamos que el enlace pasa un parámetro como el siguiente:
<a href="page.xhtml?form=1">link</a>
Luego puede mostrar el formulario como se muestra a continuación:
<h:form rendered="#{param.form eq '1'}">
( #{param}
Es un objeto EL implícito que se refiere a una Map
representación de los parámetros de solicitud)
Ver también:
- Eutorial EE de Yakarta - Capítulo 9. Lenguaje de expresión
- Cómo mostrar componentes JSF si la lista no es nula y tiene tamaño() > 0
- ¿Por qué necesito anidar un componente con rendered="#{some}" en otro componente cuando quiero actualizarlo con ajax?
Además del post anterior puedes tener
<h:form rendered="#{!bean.boolvalue}" />
<h:form rendered="#{bean.textvalue == 'value'}" />
jsf 2.0