88 votes

Affichage conditionnel des composants JSF

Tout d'abord, je suis novice dans le domaine de Java EE et j'ai une solide expérience en matière de développement ASP .NET. J'ai parcouru le net, et il se peut que je manque quelque chose, mais il semble qu'il n'y ait aucun tutoriel simple et direct sur la façon dont je pourrais connecter une classe de haricot à un composant JSF.

Un bon exemple est le suivant : j'essaie actuellement de créer une page JSF où il y a un ensemble de liens comme barre de menu et un ensemble de formulaires. Ce que je prévois de faire, c'est que lorsqu'on clique sur un lien, un formulaire particulier sera rendu.

En ASP.NET, je pourrais facilement récupérer l'élément et ensuite définir l'attribut pour qu'il soit affichable. Je me demande s'il existe un moyen simple (ou même un moyen quelconque) de faire cela dans JSF.

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

176voto

BalusC Points 498232

Oui, utilisez le rendered attribut.

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

Vous l'attachez généralement au modèle plutôt que de laisser le modèle 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 comme gt , ge , le y lt au lieu de > , >= , <= y < comme des crochets d'angle < y > sont des caractères réservés en XML. Voir également cette question-réponse connexe : Erreur d'analyse du 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 alors 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 demande)

Voir aussi :

16voto

tosha Shah Points 488

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

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

Jsf 2.0

1 votes

Un si petit ajout ne mérite pas une réponse séparée.

6voto

GkhnSr Points 653

Tous les symboles attendus sont ci-dessous :

  • "."
  • "["
  • " :"
  • ">"
  • "gt"
  • "<"
  • "lt"
  • ">="
  • "ge"
  • "<="
  • "le"
  • "=="
  • "eq"
  • "!="
  • "ne"
  • "&&"
  • "et"
  • "||"
  • "ou"
  • "*"
  • "+"
  • "-"
  • " ?"
  • "/"
  • "div"
  • "%"
  • "mod"

0voto

Arun Points 1

De même, nous pouvons désactiver un composant dans le formulaire, pour cela nous utiliserons 'disabled'.

Cet attribut prend la valeur true/false. Si l'expression donne un vrai, alors le composant spécifié sera désactivé, sinon il sera activé.

Ex : Je veux désactiver un bouton pour une certaine condition.

<p:commandButton id="addInformedConsentBtn"
    value="Add Comments" title="Add Comments"
    disabled="#{backingBean.booleanResultOrVariable}">
</p:commandButton>

0 votes

C'est exact, mais la question portait sur le rendu, pas sur la désactivation. L'affichage d'informations que l'utilisateur n'est pas autorisé à voir ne s'améliore pas si vous le désactivez simplement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X