Comment faire pour désactiver la page/formulaire JSF
Pour mon application je veux avoir les utilisateurs avec des autorisations différentes. Une autorisation permettant à un utilisateur d'afficher les données de ma base de données, tandis qu'un autre la permission de leur permettre de modifier les données. Sur ouvrir une session, je voudrais vérifier leur autorisation afin de déterminer si elles peuvent modifier les données. Je suis à la recherche d'une certaine façon à désactiver l'intégralité de ma page si l'utilisateur dispose de l'autorisation en lecture seule. Est-il un moyen simple de désactiver tout à l'intérieur de la <h:form>
tag? J'aurais besoin pour être en mesure de désactiver plusieurs pages, espérons-le, simplement en regardant un booléen par backingbean. Toute aide serait grandement appréciée.
-EDIT-
Est-il des conteneurs ou des comme ça j'ai pu enrouler autour de mes entrées qui peut être désactivé? De cette façon, j'aurais seulement besoin de faire référence à la diable dans un endroit et on pourrait aussi laisser à chaque champ pour définir ses propres désactiver la propriété, si c'est nécessaire dans une autre logique que j'ai?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez désactiver les boutons, les liens, les champs de saisie (tout ce qui permet l'édition), etc... pointant tous à la même valeur dans le backing bean.
Je ne connais pas un moyen de désactiver tout ce qui est contenu dans un formulaire, mais vous ne voulez pas le faire parce que vous pouvez vouloir que l'utilisateur de soumettre des requêtes de recherche (c'est à dire une zone de recherche) dans le formulaire.
Mise à jour: répondre au commentaire de Alex Larzelere.
À mon humble avis, dans ce cas, il vaut mieux utiliser
disabled
plutôt querendered
que vous voulez afficher la valeur d'un champ à l'utilisateur dans uninputText
boîte, mais lui laisse pas le temps de le modifier. Si vous n'avez pas le rendre, il ne peut pas le voir. Vous pouvez utiliseroutputText
ainsi pour l'afficher, mais alors vous devez maintenir deux éléments au lieu d'un.Mise à jour répondre à la modifier dans la question:
Vous pouvez envelopper vos composants à l'intérieur d'un
h:panelGroup
par exemple et de les rendre ou non, selon votre logique, mais vous ne pouvez pas désactiver les champs de saisie qui sont à l'intérieur de lah:panelGroup
, vous devez le faire individuellement.rendered
et à se cacher tout ce qui donne la possibilité d'éditer des utilisateurs qui ne sont pas autorisés à le faire.<h:form disable="#{bean.permission}" />
Cette simple composant personnalisé peut être utilisé pour envelopper les autres composants et il va désactiver si utilisé avec l'attribut disabled="true" ou d'une expression EL de l'évaluation à la valeur true. La façon dont il est prévu pour fonctionner, c'est que si un wrappped composant est déjà désactivé, alors il ne sera pas activé si disablePanel est utilisé (ou ajax re-rendus) avec disabled="true". Le composant seulement les tentatives de désactivation de UIInput & UICommand composants, je pense que c'est ok, mais pourrait être changé.
UIDisablePanel.java
disablepanel.taglib.xml
<p:inputText disabled="#{condition}" />
et que vous modifiez cette condition et mise à jour de l'ensemble de la disablePanel à être activé, il ne rend pas le inputText correctement désactivé, mais utilise la première désactivé etat lorsque le point de vue a été rendue la première fois. Des idées?Plus de Tomahawk de composants a displayValueOnly, visibleOnUserRole et enabledOnUserRole attributs pour les éléments de contrôle de la visibilité.
Espère liens suivants vous seront utiles:
C'est une solution pour désactiver tous les composants de votre page. Nota que,
avec cela, vous pouvez également désactiver uniquement un groupe de composants à la fois
J'ai mis la méthode disableUIComponent à l'intérieur d'une classe utilitaire car je voulais l'utiliser dans plusieurs JSFBeans.
Et puis vous pouvez les utiliser dans vos haricots. C'est un exemple pour une page qui a 3 scrollPanels et j'ai voulu désactiver uniquement panel1 et panel3:
Ça fonctionne pour moi 🙂
P. S j'ai été en utilisant primefaces 2.2
Omnifaces a un
massAttribute
taghandler pour ce avec plusieurs options. Celui qui vient fermé à ce que vous avez besoin estCela désactive tous les composants qui s'étendent de
javax.faces.component.UIInput
.Si vous voulez garder un contrôle sur les performances de l'utilisation de JQuery.
à l'aide de prop propriété de tous les éléments dans un formulaire désactivé attribut de vrai.
Vous pouvez également utiliser les propriétés booléennes de backing bean ici. Par exemple