Introdução a Thymeleaf
Simplificando, o tymeleaf é um motor de modelo semelhante ao Velocity e Freemarker, que pode substituir completamente o JSP. Comparado com outros motores de modelo, ele possui os três recursos extremamente atraentes:
1. O timeloeaf pode ser executado em um ambiente com ou sem uma rede, ou seja, permite que os artistas visualizem os efeitos estáticos das páginas no navegador e também permite que os programadores visualizem os efeitos dinâmicos da página com dados no servidor. Isso ocorre porque suporta protótipos HTML e, em seguida, adiciona atributos adicionais à tag HTML para obter o método de exibição dos modelos + dados. Quando o navegador interpreta o HTML, os atributos de tag indefinidos serão ignorados, para que o modelo de tymeleaf possa ser executado estaticamente; Quando os dados são retornados à página, a tag tymeleaf substituirá dinamicamente o conteúdo estático, tornando a página exibida dinamicamente.
2. Thymeleaf está fora da caixa. Ele fornece dois dialetos: padrão e padrão de primavera. Você pode aplicar diretamente modelos para atingir efeitos de expressão JSTL e OGNL, evitando o problema de colocar modelos, JSTL e alterar tags todos os dias. Ao mesmo tempo, os desenvolvedores também podem expandir e criar dialetos personalizados.
3.Timeleaf fornece dialeto padrão da primavera e um módulo opcional que é perfeitamente integrado ao SpringMVC, que pode implementar rapidamente a ligação de formulários, editor de atributos, internacionalização e outras funções.
Método de formulário de upload:
// html: <form Enctype = "Multipart/Form-Data" Method = "Post" Action = "/Sell/ImageUpload"> <div> <botão tipo = "Button" Data-Dismiss = "Modal" ARIA-Hidden = "True"> </Button> <H4 Id = "Mymodallabel"> EDIT PROÇÕES </H4 id = "edit_name" value = "$ {goods.name}" name = "name"/> </div> <div> <breting> code: </label> <input id = "edit_sn" name = "sn" = "$ {goods.sn}"/> </div> <div> <bel> peso: " value = "$ {goods.weight}"/> </div> <div> <belt> marketprice: </label> <input id = "edit_marketprice" name = "marketprice" value = "$ {goods.marketPrice}"/> </div> <divice> shopprice: </label "<input}" ed = "/> <divice> shopPrice: </label" <nput} "ed = </divyPrice") value = "$ {Goods.shopPrice}"/> </div> <div> <belt> unidade: </label> <input id = "edit_unit" name = "unit" value = "$ {goods.unit}"/> </div> <div> <div> <bel> Número: </LABEL> <input id = "edit_number" Nome = = "= <div> <div> <bel> Número: </LABEL> <input id =" edit_number " </div> <div> <!-<form rype = "multipart/formatdata" method = "post" action = "/Sell/imageupload"> <input ype = "hidden" id = "edit_goods_sn" name = "sn") type = "submite" value = "upload"/> <!-</morm>-> </div> </div> <div> <botão tipo = "botão" data-Dismiss = "modal"> feche </button> <input type = "submit" id = "edit_save"/"" submit "> submite alterações </input> </Diva" </Div = "edit_save" = " RequestMethod.POST) public String saveGoodsPage(@RequestParam(value = "id",required=false) String id,@RequestParam(value = "name",required=false) String name,@RequestParam(value = "sn",required=false) String sn, @RequestParam(value = "number",required=false) String number,@RequestParam(value = "weight",required=false) String weight, @RequestParam(value = "marketPrice",required=false) String marketPrice,@RequestParam(value = "shopPrice",required=false) String shopPrice, @RequestParam(value = "unit",required=false) String unit, @RequestParam(value = "detail",required=false) String detail,@RequestParam (value="file")MultipartFile file ) { if (!file.isEmpty()) { try { BufferoutOutputStream Out = new BufferoudOutputStream (new FileOutputStream (new File ("SRC/Main/Recursos/Static/Images/Product/" + Sn + ".jpg"))); // salve a imagem no diretório out.write (file.getBytes ()); out.flush (); out.Close (); String filename = "/// imagens /// produto ///" + sn + ".jpg"; /*User.Settupian(Filename); //UserRepository.Save(user); retornar "Erro de upload", + e.getMessage (); } catch (ioexception e) {e.printStackTrace (); retornar "Erro de upload" + e.getMessage (); }} //...Ote operações}Suplemento: Existe alguma diferença entre expressões variáveis e expressões de asterisco?
Não há diferença entre os dois sem considerar o contexto; A avaliação da sintaxe do asterisco é expressa no objeto selecionado, não em todo o contexto, qual é o objeto selecionado? É o valor da etiqueta pai, como segue:
<div th: object = "$ {session.user}"> <p> Nome: <span th: text = "*{primeironame}"> sebastian </span>. th: text = "*{nacionalidade}"> Saturn </span>. </p> </div>Isso é exatamente equivalente a:
<div th: object = "$ {session.user}"> <p> nome: <span th: text = "$ {session.user.firstname}"> sebastian </span>. th: text = "$ {session.user.nationality}"> Saturn </span>. </p> </div>Obviamente, o sinal do dólar e a sintaxe do asterisco podem ser misturados:
<div th: object = "$ {session.user}"> <p> Nome: <span th: text = "*{primeironame}"> sebastian </span>. th: text = "*{nacionalidade}"> Saturn </span>. </p> </div>Resumir
O exposto acima são as etapas de operação para o upload da imagem da bota de mola para você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!