web-dev-qa-db-fra.com

Affichage conditionnel des composants JSF

Tout d’abord, je suis nouveau sur Java EE, je viens d’un solide ASP. Développement .NET. Je suis passé par le net, et cela pourrait me manquer. il semble qu'il n'y ait pas de tutoriels simples et directs sur la façon dont je pourrais connecter la classe de beans de support à des composants JSF.

Voici un bon exemple: j'essaie actuellement de créer une page JSF contenant un ensemble de liens sous forme de barre de menus et un ensemble de formulaires. Ce que je prévois de faire est que lorsque vous cliquez sur un lien, un formulaire particulier sera rendu.

Dans ASP.NET, je pouvais facilement récupérer l'élément, puis définir l'attribut pour pouvoir être affiché. Je me demande s'il existe un moyen facile (diable, même de toute façon) de le faire dans JSF.

Les formulaires sont déjà dans la page, il suffit de définir l'attribut "render" sur true lorsque je clique sur un lien particulier.

74
Haikal Nashuha

Oui, utilisez l'attribut rendered.

<h:form rendered="#{some boolean condition}">

Vous le liez généralement au modèle plutôt que de le laisser saisir le composant et le manipuler.

Par exemple.

<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'}" />

Notez l’importance de opérateurs EL basés sur des mots clés tels que gt, ge, le et lt au lieu de >, >=, <= et < comme crochets < et > sont des caractères réservés en XML. Voir également ce document connexe: Erreur lors de l'analyse syntaxique XHTML: le contenu des éléments doit être constitué de données de caractères ou de balises bien formées .

En ce qui concerne votre cas d'utilisation spécifique, supposons que le lien passe un paramètre comme ci-dessous:

<a href="page.xhtml?form=1">link</a>

Vous pouvez ensuite afficher le formulaire comme ci-dessous:

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

(le #{param} est un objet EL implicite faisant référence à un Map représentant les paramètres de la requête)

Voir également:

148
BalusC

En plus du post précédent, vous pouvez avoir

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

Jsf 2.0

11
tosha Shah