Struts 1 - Come visualizzare ActionMessages
Domanda
I sono la visualizzazione ActionMessage
s attraverso un file JSP
con il seguente comando:
<logic:messagesPresent message="true">
<ul id="messsages">
<html:messages id="msg" message="true">
<li><bean:write name="msg"/> </li>
</html:messages>
</ul>
</logic:messagesPresent>
Ora voglio visualizzare solo i messaggi selezionati. Come posso indicare che il messaggio per visualizzare?
Aggiornamento
In realtà ho due oggetti ActionMessages
- messages
e warnings
.
Ora voglio visualizzare entrambi a pagina JSP
separata ... Una pagina per mostrare messages
e altro per warnings
.
Così come per indicare nella pagina JSP
ciò che i messaggi da visualizzare?
Aggiornamento - 2
Ora, ho trovato una cosa strana.
saveMessages(request, messages);
saveMessages(request, warnings);
Quando ho scritto il codice di cui sopra, solo warnings
stava lavorando. Quando ho invertito l'ordine delle due precedenti affermazioni, allora solo messages
stava lavorando.
Sembra che siamo in grado di aggiungere un solo oggetto ActionMessages
in una richiesta. Se è corretto, allora come per visualizzare i messaggi in due oggetti ActionMessages
separatamente.
Soluzione
Semplice,
Separare i messages
e la tua warnings
: Nella tua azione montanti, salvare i messaggi e gli avvisi nel seguente modo:
//For messages
saveMessages(request, messages);
//For warnings
saveErrors(request, warnings);
Per visualizzarli:
<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>
Questa mostra tutto messages
(impostando message="true"
)
<html:messages id="aMsg" message="true">
Questa mostra tutto warnings
(impostando message="false"
)
<html:messages id="aMsg" message="false">
Aggiorna Vedendo che si sta ora svuotare la domanda, il modo più semplice sarebbe quella di fare questo.
Avere una certa bandiera che indicherà se l'utente desidera visualizzare messages
o warnings
. Sul Struts Azione, richiedere la bandiera e controllare se l'utente ha selezionato la visualizzazione di messaggi o avvisi.
È quindi salvare sia warnings
o messages
in base alla selezione dell'utente e visualizzare la stessa pagina (come scritto sopra) per visualizzare i messaggi.
La ragione è questa, Struts (quando la memorizzazione di messaggi o errori) memorizza su richiesta o una sessione con la seguente costante.
- Globals.MESSAGE_KEY (che viene assegnato quando si fa
saveMessages(request, messages)
) - Globals.ERROR_KEY (che viene assegnato quando si fa
saveErrors(request, errors)
)
quando si utilizza <logic:messagesPresent message="true">
, Struts cerca la MESSAGE_KEY
(se il messaggio = true) o ERROR_KEY
(se il messaggio = false) o entrambi (se il messaggio = nessuno). Non avete il controllo di questo.
<html:messages />
TLD commenta stati:
Per impostazione predefinita, il tag sarà recuperare il fagiolo sarà iterare dal Globals.ERROR_KEY stringa costante,
ma se questo attributo è impostato su 'vero' il fagiolo sarà recuperato dal Globals.MESSAGE_KEY stringa costante. Anche se questo è impostato su 'vero', qualsiasi valore assegnato all'attributo nome saranno ignorati.
Si può anche scrivere scriptlet per verificare se quelle chiavi esiste, allora <logic:iterate />
tramite il tasto per visualizzare i messaggi (ma che saranno troppo lavoro).
Spero che questo aiuti.
Altri suggerimenti
Invece di usare l'attributo message
sulle messagesPresent
e messages
tag, è possibile utilizzare l'attributo name
per specificare il nome dei ActionMessages oggetto che avete nella pagina richiesta, sessione, o portata di applicazione.