Visualización condicional de componentes JSF

79

Primero, soy nuevo en Java EE, vengo de una sólida experiencia en el desarrollo de ASP .NET. He revisado la red y es posible que me pierda esto, pero parece que no hay tutoriales simples y directos sobre cómo podría conectar la clase de bean de respaldo a un componente JSF.

Un buen ejemplo es como 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 en particular.

En ASP.NET, podría recuperar fácilmente el elemento y luego configurar el atributo para que se pueda visualizar. Me pregunto si hay una manera fácil (diablos, incluso de cualquier manera) de hacer esto en JSF.

Los formularios ya están en la página, solo es cuestión de establecer el atributo "render" en verdadero cuando hago clic en un enlace en particular.

Haikal Nashuha
fuente

Respuestas:

158

Sí, usa el renderedatributo.

<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 basados EL palabras clave tales como gt, ge, ley lten lugar de >, >=, <=y <como soportes de ángulo <y >están reservados caracteres 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 formados .

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 de la siguiente manera:

<h:form rendered="#{param.form eq '1'}">

(el #{param}es un objeto EL implícito que se refiere a una Maprepresentación de los parámetros de la solicitud)

Ver también:

BalusC
fuente
13

Además de la publicación anterior puedes tener

<h:form rendered="#{!bean.boolvalue}" />
<h:form rendered="#{bean.textvalue == 'value'}" />

Jsf 2.0

tosha Shah
fuente
1
Una adición tan pequeña no merece una respuesta separada.
Karl Richter