Struts 1 - Como exibir o ActionMessages
Pergunta
Estou exibindo ActionMessage
s através de um JSP
Arquivo pelo seguinte 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>
Agora eu quero exibir apenas mensagens selecionadas. Como posso indicar qual mensagem exibir?
Atualizada
Na verdade eu tenho dois ActionMessages
objeto - messages
e warnings
. Agora eu quero exibir os dois em separados JSP
página ... uma página para mostrar messages
e outro para warnings
.
Então, como indicar no JSP
página que qual mensagens exibem?
Atualizado - 2
Agora, eu encontrei uma coisa estranha.
saveMessages(request, messages);
saveMessages(request, warnings);
Quando escrevi o código acima, apenas warnings
estava a trabalhar. Quando revertei a ordem das duas declarações acima, apenas messages
estava a trabalhar.
Parece que podemos adicionar apenas um ActionMessages
objeto em um pedido. Se estiver correto, como exibir mensagens em duas ActionMessages
objetos separadamente.
Solução
Simples,
Separar o seu messages
e seu warnings
: Na ação de suas suportes, salve suas mensagens e avisos da seguinte forma:
//For messages
saveMessages(request, messages);
//For warnings
saveErrors(request, warnings);
Para exibi -los:
<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>
Isso exibe tudo messages
(definindo message="true"
)
<html:messages id="aMsg" message="true">
Isso exibe tudo warnings
(definindo message="false"
)
<html:messages id="aMsg" message="false">
ATUALIZAR Vendo que agora você está limpando sua pergunta, a maneira mais simples seria fazer isso.
Tenha uma certa bandeira que indique se o usuário gostaria de ver messages
ou warnings
. Na ação Struts, solicite o sinalizador e verifique se o usuário selecionou mensagens de visualização ou avisos. Você então salva warnings
ou messages
Com base na seleção do usuário e exiba a mesma página (como você escreveu acima) para exibir mensagens.
O motivo é isso, o suporte (ao armazenar mensagens ou erros) armazena -o mediante solicitação ou sessão com a seguinte constante.
- Globals.message_key (que é atribuído quando você faz
saveMessages(request, messages)
) - Globals.error_key (que é atribuído quando você faz
saveErrors(request, errors)
)
Ao usar <logic:messagesPresent message="true">
, Struts procura o MESSAGE_KEY
(se mensagem = true) ou ERROR_KEY
(se message = false) ou ambos (se mensagem = nenhum). Você não tem controle disso.
<html:messages />
Os comentários do TLD afirmam:
Por padrão, a tag recuperará o feijão, ele irá a partir dos globals.error_key string constante,
Mas se esse atributo estiver definido como 'true', o feijão será recuperado dos globals.message_key string constante. Além disso, se isso estiver definido como 'True', qualquer valor atribuído ao atributo de nome será ignorado.
Você também pode escrever roteiro para verificar se essas chaves existem, então <logic:iterate />
Através da chave para exibir as mensagens (mas isso será muito trabalho).
Espero que isto ajude.
Outras dicas
Em vez de usar o message
atributo no messagesPresent
e messages
tags, você pode usar o name
Atribua para especificar o nome do objeto ActionMessages que você possui em página, solicitação, sessão ou escopo do aplicativo.