PrimeFaces p:selectOneMenu largeur
Je veux p:selectOneMenu
largeur automatique quant à la cellule mère pas quant aux valeurs qu'elle possède.
<p:panelGrid>
<p:row>
<p:column><p:outputLabel value="Value01" for="idInput01"/></p:column>
<p:column><p:inputText value="#{bean.input01}" id="idInput01" /></p:column>
<p:column><p:outputLabel value="Value02" for="idSelect" /></p:column>
<p:column>
<p:selectOneMenu value="#{bean.selectedObject}" id="idSelect" converter="objectConverter">
<f:selectItems value="#{bean.objectsList}" var="varObject" itemLabel="#{varObject.label}" itemValue="#{varObject}" />
</p:selectOneMenu>
</p:column>
</p:row>
</p:panelGrid>
Ce que j'ai :
Ce que j'en attends :
Remarque: je ne veux pas de spécifier une largeur fixe.
Édité réponse devrait maintenant fonctionner.
OriginalL'auteur ehab refaat | 2013-05-28
Vous devez vous connecter pour publier un commentaire.
j'ai remplacé
.ui-selectonemenu, .ui-selectonemenu-label
:Tha est pourquoi je l'ai fait en jQuery! 🙂
désolé, je n'ai pas essayé votre code
je dnot savoir jQury bien, j'ai donc passé votre réponse, désolé encore une fois
OriginalL'auteur ehab refaat
Ma solution: autoWidth="false"
Ce bug est plus probable fixe dans certains 6.X version. Dans l'édition de la communauté de 6.0 - min-wdth qui va dans le menu déroulant de la div est 100% impoperly calculé. Il semble être calculés sur la base de l'élément sélectionné sur le menu déroulant et pas sur le plus gros label.
OriginalL'auteur Marcos Abrahão
Le seul moyen que j'ai trouvé est d'utiliser
jQuery
pour initialiser la largeur au moment du chargement.Vous pouvez simplement créer une classe CSS comme ceci (juste pour être utilisé comme un futur sélecteur de) :
Et l'ajouter à votre composant :
Puisque vous aurez besoin jQuery, vous devez ajouter ce à l'intérieur de votre
h:head
si vous n'êtes pas déjà PrimeFaces composants qui l'utilisent.Voici le petit script que d'initialiser tous les p:selectOneMenu dans le sélecteur :
Je ne suis pas encore à l'aide de PrimeFaces, il rendre une plaine
<select />
? Je ne pense pas par votre commentaire! 🙁C'est vrai. Sélectionnez est caché, et la liste déroulante est lui-même rendu qu'un
div
avecul
/li
de style. Ainsi, lewidth:100%
fonctionne uniquement sans danger dans le cas où il y en a un<p:selectOneMenu>
est un tableau. En outre, PF override de la classe CSS en inline style de largeur.Je l'ai testé sur PrimeFaces vitrine avec Firebug et nous avons besoin de changer la largeur de deux éléments avec 16px différence de largeur entre eux au moins... mauvaise chose. Ils devraient inclure un
width
attribut.Le Double de ceux des problèmes lors de l'utilisation de tables avec plusieurs listes déroulantes. Mon test a confirmé que l'ordre des questions, ainsi que comment et où vous avez mis que
width
. En fin de compte, il y a de l'INTERFACE utilisateur des problèmes lorsque vous affectez la largeur dans un lieu non prévu par PF, ainsi que faire un peu de dactylographie dans une liste déroulante, et c'est un vide gris espace rempli entre la section de texte et le bouton flèche bas.OriginalL'auteur Alexandre Lavoie
vous pouvez ajouter la valeur de la largeur directement dans le composant à modifier, afin d'éviter de toucher d'autres p: selectOneMenu existant dans la page.
OriginalL'auteur Nimpo
J'ai maintenant un bon correctif pour cela.
Primefaces 6.0 a maintenant un nouveau champ appelé autoWidth que par défaut est définie sur true, et vous pouvez mettre à false.
SI vous n'avez que certaines des réponses ci-dessus le dire et de le mettre à false, tout ce que vous faites est jouer à la roulette avec vous app css.
Par la valeur false, primefaces laissera à vous de gérer la largeur.
Vous pouvez soit avoir une largeur définie sur la selectOneMeny expliclitly par l'attribut de style, ou une certaine classe css dans votre application.
Mais ce n'est pas ce que cette question est à propos, cette question est sur le fait que la valeur par défaut behaivor de ne pas spécifier la largeur d'un menu déroulant de fait conduit nos menus déroulants normalement être trop petit pour les étiquettes.
Donc, ce que nous voulons, c'est la autoWidth de travail proplerly.
Enfin, j'ai regardé le composant et le moteur de rendu, et il est évident que les auto-largeur mécanisme ne fonctionne pas dans le backend côté.
Le backend côté seulement construit quelques JSON comme des données qui le primefaces javascript constructeur peut utiliser pour correctement régler sur le navigateur, le comportement du widget.
Si vous loook à primefaces 6.0 code source, le bug est dans META-INF\ressources\primefaces\formulaires
De recherche pour le code qui dit la chose suivante:
Dans cette fonction javascript chasse pour le morceau de code qui dit:
Dans cette section de code votre bug est la ligne suivante:
Ici, j'ai appliqué le patch suivant, qui nous l'espérons devrait travailler en geting la liste déroulante, d'être aussi gras que la plus grande étiquette:
L'idée de le code ci-dessus est:
(a) regardez le caché div avec toutes les étiquettes et obtenir la largeur de la div
(b) ajouter à cette longueur, la largeur nécessaire pour le primefaces triangle orienté vers le bas
(c) comparer la largeur, nous avons calculé à ce qui est suggéré par primefaces et qui semble être trop petit
NOTE:
Pour installer le correctif, vous devez copier tous les Primaces code de la SelectOneWidget.
L'ajouter à un fichier javascript sous votre contrôle.
Assurez-vous que vous n'exécutez la compilation de votre fichier javascript après le primefaces javascript fichier a été chargé.
Normalement primefaces est rendu à la TÊTE.
Donc, si vous avez vous jasvacript comme la dernière ement dans le corps, vous devriez être bien.
L'application de correctifs fonctionne bien pour moi.
C'est un code que je n'aime pas à maintenir cependant.
99Sono ce bug existe encore dans le PF 6.12. Pourquoi ne pas soumettre vos patch pour le GitHub page des questions? github.com/primefaces/primefaces/issues
Si je me souviens bien, sur le primefaces github "questions de" il avait existé une sorte de discussion où j'avais commenté sur elle et avait fourni le lien vers ce correctif ici. Je crois que c'était le cas pour ce problème particulier. Le mieux serait de faire une pull request - c'est vrai - mais je dois trouver le temps pour cela. Et je suppose qu'avec un commentaire de la soumission, de la Optimmusprime serait pour vous de fixer le payé la version de primefaces.
Je vais prendre soin de la PR. Merci pour ton code!
OriginalL'auteur 99Sono
Vous pouvez l'ID de l'élément et de changer de style de largeur par CSS. Faire 100% de son conteneur.
OriginalL'auteur infiniteStacks
Si votre
p:selectOneMenu
est dans un DIV avec une affectation de largeur, je trouve réglagestyle="width:100%;"
sur lep:selectOneMenu
semble fonctionner dans mon cas.OriginalL'auteur peater
Peut être le problème min-width, qui est défini dans le rendu HTML. Si c'est votre cas, utilisez un sélecteur CSS largeur fixe comme ceci:
puis définir CSS
Qui définit la largeur de la selectOneMenu widget à la largeur de l'élément parent. Pour qu'il fonctionne, parent des éléments de la largeur ne doit pas être "auto".
OriginalL'auteur DoraCet
Ceux qui ont encore eu de problème avec selectonemenu pouvez essayer cette
Parfaitement fonctionné pour moi.
OriginalL'auteur Prakash Bist