Pergunta

Estou exibindo ActionMessages 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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top