Struts 1 - Comment afficher ActionMessages
Question
J'affichons ActionMessage
s par un fichier JSP
par la commande suivante:
<logic:messagesPresent message="true">
<ul id="messsages">
<html:messages id="msg" message="true">
<li><bean:write name="msg"/> </li>
</html:messages>
</ul>
</logic:messagesPresent>
Maintenant, je veux afficher uniquement les messages sélectionnés. Comment puis-je indiquer quel message à afficher?
Mise à jour
En fait, j'ai deux objet ActionMessages
- messages
et warnings
.
Maintenant, je veux afficher tous les deux sur la page JSP
séparée ... Une page pour montrer messages
et d'autres pour warnings
.
Alors, comment indiquer dans la page JSP
que les messages à afficher?
Mise à jour - 2
Maintenant, j'ai trouvé une chose étrange.
saveMessages(request, messages);
saveMessages(request, warnings);
Quand j'ai écrit le code ci-dessus, que warnings
travaillait. Quand je renversé l'ordre des deux déclarations ci-dessus, alors que messages
travaillait.
Il semble que nous pouvons ajouter qu'un seul objet ActionMessages
dans une requête. Si elle est correcte, alors comment afficher des messages dans deux objets ActionMessages
séparement.
La solution
Simple,
Séparez votre messages
et votre warnings
: Dans votre action Struts, enregistrez vos messages et mises en garde comme suit:
//For messages
saveMessages(request, messages);
//For warnings
saveErrors(request, warnings);
Pour les afficher:
<logic:messagesPresent message="true">
<html:messages id="aMsg" message="true">
<logic:present name="aMsg">
<!-- Messages -->
<div class="messages">
<bean:write name="aMsg" filter="false" />
</div>
</logic:present>
</html:messages>
</logic:messagesPresent>
<logic:messagesPresent message="false">
<html:messages id="aMsg" message="false">
<logic:present name="aMsg">
<!-- Warnings-->
<div class="warnings">
<bean:write name="aMsg" filter="false" />
</div>
</logic:present>
</html:messages>
</logic:messagesPresent>
affiche toutes messages
(en définissant message="true"
)
<html:messages id="aMsg" message="true">
affiche toutes warnings
(en définissant message="false"
)
<html:messages id="aMsg" message="false">
UPDATE Voyant que vous effacer maintenant votre question, la façon la plus simple serait de le faire.
Avoir un certain drapeau qui indique si l'utilisateur souhaite voir messages
ou warnings
. Sur l'action Struts, demander le drapeau et vérifier si l'utilisateur a sélectionné l'affichage des messages ou des avertissements.
Ensuite, vous enregistrez soit warnings
ou messages
en fonction de la sélection de l'utilisateur et afficher la même page (comme vous avez écrit ci-dessus) pour afficher les messages.
La raison est, Struts (lorsque vous le stockage des messages ou des erreurs) stocke sur demande ou d'une session avec la constante suivante.
- Globals.MESSAGE_KEY (qui est attribué lorsque vous faites
saveMessages(request, messages)
) - Globals.ERROR_KEY (qui est attribué lorsque vous faites
saveErrors(request, errors)
)
lors de l'utilisation <logic:messagesPresent message="true">
, Struts recherche le MESSAGE_KEY
(si le message = true) ou ERROR_KEY
(si le message = false) ou les deux (si le message = aucun). Vous avez aucun contrôle de cela.
<html:messages />
TLD commente les états:
Par défaut la balise récupérera la haricots il itérer de la Globals.ERROR_KEY chaîne constante,
mais si cet attribut est réglé sur « true » la fève sera récupéré à partir du Globals.MESSAGE_KEY chaîne constante. Aussi, si ce paramètre est réglé, tout « vrai » valeur attribuée à l'attribut name seront ignorés.
Vous pouvez également écrire scriptlet pour vérifier si ces clés EXISTE, <logic:iterate />
puis par la touche pour afficher les messages (mais ce sera trop de travail).
Hope this helps.
Autres conseils
Au lieu d'utiliser l'attribut message
sur les messagesPresent
et les balises messages
, vous pouvez utiliser l'attribut name
pour spécifier le nom des ActionMessages objet que vous avez à la page, demande, session ou champ d'application.