Montrant la JSF Messages d'Erreur
Je suis en utilisant JSF Myfaces Impl 1.2 sans tomahawk et d'autres libs :
Je suis en utilisant différents styles de + images à montrer JSF messages d'Erreur trouverez ci-dessous un échantillon.
<h:panelGroup rendered="${adminBean.showErrorIcon==2}">
<table width="375" align="center" class="InfoMsg" border="1"
cellspacing="0" cellpadding="0">
<tr>
<td>
<table width="375" align="center" class="InfoMsg" border="0">
<tr>
<td width="50"><img src="static/images/info_icon.gif"
width="40" height="40" border="0" /></td>
<td width="325" align="left"><h:messages layout="table"
errorClass="InfoMsg" /></td>
</tr>
</table>
</td>
</tr>
</table>
Basée sur la variable int de la Sauvegarde de la Fève , je suis l'affichage d'une image diff et le correspondant FacesMessage(s) dans l'écran seulement 2 cas d'erreur ou d'une information.
Je suis en utilisant le code ci-dessous pour définir la variable de l'appui de Haricots
//Checking if there are messages!
log.debug("Checking if there are messages to be shown ]");
if(getShowErrorIcon()==99){//Set only if the value is still the default :
log.debug("getShowErrorIcon was DEFAULT - Changing it ]");
Iterator<FacesMessage> messages = FacesContext.getCurrentInstance().getMessages();
if(messages != null && getShowErrorIcon()==99){//Set Error/Info for messages that are not added here :
while(messages.hasNext()){
log.debug("There are ***messages***");
FacesMessage aMessage =(FacesMessage) messages.next();
if(aMessage.getSeverity().compareTo(FacesMessage.SEVERITY_ERROR)==0){
setShowErrorIcon(1);
break;//just once is enough
}
if(aMessage.getSeverity().compareTo(FacesMessage.SEVERITY_INFO)==0){
setShowErrorIcon(2);
break;
}
}
}
}//if it is not default, then something has been set already, why again?
Maintenant le problème que j'ai , Il y a des FacesMessage(s) sont ajoutés par le MyFacesImpl - comme l'required=true et le validateur personnalisé des messages qui sont ajoutés au cours de PROCESS_VALIDATION Phase, ce ne sont pas affichées dans l'écran depuis ma variable de type entier de la Sauvegarde de Haricot n'est pas , et puisque la INVOKE_APPLICATION Phase n'a pas été appelé (et cela signifie que le code ci-dessus n'a pas été appelé!!!)
Comment puis-je résoudre ce problème? Ou quel est le meilleur chemin /Où est le meilleur endroit pour placer le code de vérification ci-dessus ?
Remercie de votre aide.Merci!
OriginalL'auteur gekrish | 2010-07-06
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr, mais tout cela ressemble inutilement trop compliqué. Pour modifier les icônes et les différents styles en fonction de la gravité du message, il suffit de l'utilisation de la CSS pouvoirs. Vous pouvez spécifier différentes classes CSS basé sur la gravité du message à l'aide de
infoClass
eterrorClass
attributs de la<h:messages>
et vous pouvez spécifier les icônes CSS image d'arrière-plan.JSF:
CSS:
La
<h:messages layout="table">
déjà en lui-même rend un HTML<table>
. Je pense que l'ensemble de la table autour de, il est inutile que de bien. Il suffit d'appliquer les styles en conséquence l'habitude CSS.Voir aussi:
Mise à jour: selon les commentaires, vous êtes à la recherche de quelque chose comme ceci:
avec CSS:
Cette montre deux tables de messages, un pour
info
et d'autres pourerror
messages, chacun avec une seule icône sur le centre gauche.Ah oui, je comprends maintenant l'exigence fonctionnelle. C'est faisable avec juste CSS. Je vais modifier le CSS en conséquence.
Grâce BalusC. Je vais essayer ça un peu plus tard. J'ai fait un truc, j'ai ajouté le code ci-dessus dans la question d'Origine dans la lecture de ShowErrorIcon et retourné 1 ou 2 basé sur les messages dans le Contexte. Cela a fonctionné comme un Charme. Je devais trouver un endroit du code où va certainement exécuter avant que l'écran ne soit rendue.Je vais mettre à jour si je fais face à tous les problèmes. Btw , Ne vous vois aucun problème ici? faire de cette façon?
Ainsi, le contrôle de la mise en page de la fève et de dupliquer le code de la vue est un peu maladroit. Je préfère le CSS pour ça. Vous pouvez par exemple utiliser plutôt
<table class="${bean.error ? 'error' : 'info'}">
et de s'en tenir à une table. SEC!Vous répondre à beaucoup de JSF questions 😛
OriginalL'auteur BalusC