Thymeleaf Duvidas

Pessoal estou usando thymeleaf para envio de e-mail, porém nao quer quebrar linha em campo alguem pode me ajudar ? vou mandar o codigo
image

image

Se a ideia é apresentar em várias linhas, é melhor vc montar a lista, passá-la para o template e, lah mesmo, fazer um loop para apresentar os itens como lista. Vai ficar bem melhor e mais fácil de dar manutenção também.

Pensei em algo próximo disso:

<ul th:each="mensagem : ${mensagens}">
    <li th:text="${mensagem}"></li>
</ul>

Olá lucas, então na verdade assim estou fazendo uma varredura dentro de uma lista, aonde fica armazenado o chat da conversa relacionando com sistema de chamado segue exemplo abaixo:
image

Na imagem abaixo estou realizando um varredura junto com arraylist aux pra adicionar um unico chamado com a conversa N

image

Abaixo o JavaMailSender

Html que ajustei para realizar envio do e-mail:

Baixo aonde está o campo da mensagem aonde eu queria que historico da conversa fize um \n ou br não quebra a linha.

Preciso que seja nesse formato abaixo:

• 2022-11-09 08:42:29.31 Gustavo Scarpin Leonardo Fukuda quebra de linha nao funciona → “Nesse Momento preciso < /br >”
• 2022-11-09 08:42:36.299 Gustavo Scarpin TOTVS CURITIBA

Evite postar código como imagem, eh melhor de ajudar se o código vier como texto

Onde você estou no template a variável mensagens?

Desculpa não entendi.

Onde vc fez:

context.setVariable("mensagens", ...)

?

Não achei no código que vc postou.

for (GrupoUsuario group : listadegrupo) {
if (group.getId() == obj.getGrupousuario_id().getId()) {

			setorSolicitacao = group.getSetor();

			Context context = new Context();

			context.setVariable("chamado", obj);
			context.setVariable("nomeSolicitante", nomeSolicitante);
			context.setVariable("setorSolicitacao", setorSolicitacao);
			context.setVariable("dataemissaoconvert", dataemissaoconvert);
			context.setVariable("nomeAtribuido", nomeAtribuido);
			context.setVariable("mensagem", mensagem.toString().replace("[", "").replace("]", "").replace(",", " "));
			
			String html = templateEngine.process("email/chamadoresolvido", context);
			helper.setText(html, true);

			helper.setTo(group.getEmail());
			helper.setFrom(sender);
			javaMailSender.send(mimeMessage);

		}

	}

A ideia é fazer algo assim:

List<String> mensagens = new ArrayList<>();

// formata e monta as mensagens para cada grupo de usuários

context.setVariable("mensagens", mensagens);

Faz sentido?

Mesmo assim meu campo nao quebro a linha segue o codigo abaixo

for(ChamadoAcompanhamento ca : listaAcompanhamentos) {
			if(ca.getChamado().getId() == obj.getId()) {
				mensagens.add(ca.getDtAcompanhamento().toString());
				mensagens.add(ca.getUsuario().getNomecomplemento().toString());
				**mensagens.add(ca.getMensagem().toString()+"\n\n");**
			}
		}
<ul th:each="mensagem : ${mensagens}">
    <li th:text="${mensagem.replace('\n','</br>') }"></li>
</ul>

no E-mail eu recebo nesse formato tudo junto e nao quebra a linha

• 2022-11-09 10:16:54.694 Gustavo Scarpin Olá tudo bem ? 2022-11-09 10:16:58.988 Leonardo Fukuda Sim e voce ? 2022-11-09 10:17:05.426 Leonardo Fukuda ok vou atender seu chamado

Precisa ficar nesse formato assim:

• 2022-11-09 10:16:54.694 Gustavo Scarpin Olá tudo bem ?
• 2022-11-09 10:16:58.988 Leonardo Fukuda Sim e voce ?
• 2022-11-09 10:17:05.426 Leonardo Fukuda ok vou atender seu chamado

Acho que to entendendo melhor a forma como vc está fazendo. Você está colocando todas as propriedades como itens de uma lista.

Vc jah pensou em considerar ter um DTO já no formato esperado pela tela? Ex.:

public class VisualizacaoChamadoDTO {
  String dataAcompanhamento;
  String nomeUsuario;
  List<String> mensagens;
}

Com isso, vc apenas passaria uma instância de VisualizacaoChamadoDTO para cada ChamadoAcompanhamento para o template do thymeleaf:

context.setVariable("visualizacoesChamadosDTO", visualizacoesChamadosDTO);

Então na verdade e assim nao quebra a linha no thymeleaf fiz um teste no log do java
meu \n quebra a linha perfeitamente.

segue o log

Ao tentar incluir <br/> na string para ser renderizado na tela, possivelmente não está funcionando pq o thymeleaf deve estar tratando isso (esqueci o termo para isso).

Uma coisa, como fica o html renderizado quando as linhas não estão sendo quebradas? Tu consegue postar ele?

Tag → no html → th:text="${#strings.replace(mensagens,<br>,<br />)} ">

como eu receço o a html no e-mail →

Tenta usar

th:utext="${mensagem.replace('\n','</br>')}"

em vez de

th:text="${mensagem.replace('\n','</br>')}"

Pelo que li, o th:utext faz com que o texto seja interpretado como html.

FONTE: Tutorial: Using Thymeleaf

deu certo obrigado!