Thymeleaf Duvidas

15 respostas Resolvido
javathymeleaf
G

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

15 Respostas

L

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>
G

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

L

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?

G

Desculpa não entendi.

L

Onde vc fez:

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

?

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

G

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);

		}

	}
L

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?

G

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>
G

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

L

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);
G

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

L

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?

G

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

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

L
Solucao aceita

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

G

deu certo obrigado!

Criado 8 de novembro de 2022
Ultima resposta 21 de nov. de 2022
Respostas 15
Participantes 2