Pourquoi la forme préfixe d'id dans le h:message de sortie?
Je suis en train d'essayer de validation simple à l'aide de required="true"
<h:form>
<h:messages globalOnly="true"/>
<h:panelGrid>
<h:panelGrid columns="3">
<f:facet name="header">
Login Application Sample
</f:facet>
<h:outputLabel for="UserId" value="User Id" />
<h:inputText id="UserId" value="#{userBean.userId}" required="true" />
<h:message for="UserId"/>
<h:outputLabel for="Password" value="Password" />
<h:inputSecret id="Password" value="#{userBean.password}" required="true" />
<h:message for="Password" />
<f:facet name="footer">
<h:commandButton value="Login" action="#{userBean.login}"/>
<h:commandButton type="reset" value="Reset"/>
</f:facet>
</h:panelGrid>
</h:panelGrid>
</h:form>
Laissant le champs est vide, et puis clickin sur le bouton de connexion, ces messages d'erreur s'affichent sur le côté droit de chaque champ :
j_idt7:UserId: Erreur de Validation: une Valeur est requise.
j_idt7:Mot de passe: Erreur de Validation: une Valeur est requise.
C'est ce à quoi je m'attendais, mais je ne veux pas afficher le formulaire préfixe d'id de " j_idt7:'. J'ai lu le livre des exemples, ils n'ont pas de sortie de la forme préfixe d'id. Ce que je veux est :
UserId: Erreur de Validation: une Valeur est requise.
Mot de passe: Erreur de Validation: une Valeur est requise.
Que dois-je faire pour ignorer l'affichage du formulaire préfixe d'id dans le volet des messages spécifiques ?
Je suis en train de tester JSF 2 dans glassfish v3.
Désolé, changer mon approche de la nouvelle suggestion de l'utilisation de l'attribut label. De cette façon, mes messages d'erreur ont conviviale nom affiché dans les messages d'erreur à la place du champ id.
Un peu en retard: Vous pouvez maintenant utiliser
requiredMessage
à cette fin.OriginalL'auteur bertie | 2010-12-08
Vous devez vous connecter pour publier un commentaire.
L'étiquette du message par défaut du composant d'identification de client, exactement le même que celui que vous pouvez voir dans le code HTML généré en sortie via un clic droit, l'Affichage de la Source. Que
j_id7
est dans ce cas en particulier, le client ID du parent<form>
élément. Si vous donnez la JSF composante fixe ID comme<h:form id="login">
puis les étiquettes de devenirlogin:UserId
etlogin:Password
respectivement.Toutefois, vous pouvez utiliser le composant d'entrée du
label
attribut de remplacer complètement, de sorte que l'étiquette du message sera affiché exactement comme vous le destiné.Si le niveau d'entrée du composant
label
attribut est présent, alors il sera utilisé à la place de l'ID du client. À l'aide deprependId="false"
comme suggéré par d'autres réponses a inconvénients. Ne pas le faire.Un de complètement différent alternative est d'utiliser
requiredMessage
(ouconverterMessage
ouvalidatorMessage
) attribut pour cela, mais cela ne permet pas de paramétrer des messages et donc vous auriez à coder en dur les étiquettes et.Voir aussi:
Noté devrait être qu'elle est en effet délicat d'avoir des étiquettes dupliquées comme ceci:
Si vous arrive d'utiliser JSF bibliothèque utilitaire OmniFaces, alors vous pouvez utiliser
<o:outputLabel>
laisser JSF de manière transparente ensemble de lalabel
attribut de l'élément associé:OriginalL'auteur BalusC
Si vous utilisez MyFaces et le haricot cadre de validation (JSR303) de tenter de définir un MessageBundle avec une clé javax.des visages.programme de validation.BeanValidator.MESSAGE
faces-config.xml
ApplicationMessages.propriétés
Détails
OriginalL'auteur turbolift
Vous avez besoin de remplacer ces messages de JSF.
Vous pouvez avoir des messages.les propriétés de fichier dans votre classpath
Messages.propriétés
Faces-config.xml
Jetez un oeil à cet Article
OriginalL'auteur Jigar Joshi
Si vous vous souciez de voir le code source HTML à partir de votre navigateur, vous trouverez que la
id
de votreinput
champ est<form-id>+":"+<input-field-id>
, dans votre cas,j_idt7:UserId:
. Essayez de donner à vos<h:form>
desid
afin de donner un sens hors de lui. Vous pouvez lire à ce sujet JSF Id ici. Dans le cas où vous ne l'aimez pas, vous pouvez la désactiver en modifiant votreform
balise à quelque chose comme cela,Mais qui pourrait se révéler problématique, comme l'a souligné BalusC ici.
En outre, il semble que vous n'avez jamais configuré tous les messages de validation vous-même. Qui à son tour se termine avec ce message. Par conséquent, une
message.properties
fichier est nécessaire d'avoir un contrôle sur le message et de montrer quelque chose de plus approprié. Même alors, le nom de champ ne doit pas être la partie du message, afin de rendre ces message de validation générique pour éviter la répétition. Voir BalusC réponse concernant l'utilisation delabel
attribut à l'intérieur de la<h:inputText>
.OriginalL'auteur Adeel Ansari
Où vous écrivez
required = true
, vous pouvez y définirrequiredMessage = "My Message"
pour tout type d'entrée.par exemple
OriginalL'auteur Kashif