Introducción a Tymeleaf
En pocas palabras, Thymeleaf es un motor de plantilla similar a Velocity y Freemarker, que puede reemplazar por completo a JSP. En comparación con otros motores de plantilla, tiene las siguientes tres características extremadamente atractivas:
1. El hojas de tiempo se puede ejecutar en un entorno con o sin una red, es decir, permite a los artistas ver los efectos estáticos de las páginas en el navegador, y también permite a los programadores ver los efectos dinámicos de la página con datos en el servidor. Esto se debe a que admite prototipos HTML, y luego agrega atributos adicionales a la etiqueta HTML para lograr el método de visualización de plantillas + datos. Cuando el navegador interpreta HTML, se ignorarán los atributos de la etiqueta indefinidos, por lo que la plantilla de Thymeleaf puede ejecutarse estáticamente; Cuando los datos se devuelven a la página, la etiqueta Thymeleaf reemplazará dinámicamente el contenido estático, haciendo que la pantalla se visualice dinámicamente.
2. Thymeleaf está fuera de la caja. Proporciona dos dialectos: estándar y estándar de resorte. Puede aplicar directamente las plantillas para lograr los efectos de expresión JSTL y OGNL, evitando el problema de poner plantillas, JSTL y cambiar las etiquetas todos los días. Al mismo tiempo, los desarrolladores también pueden expandir y crear dialectos personalizados.
3.ThyMeleaf proporciona el dialecto estándar de Spring y un módulo opcional que está perfectamente integrado con SpringMVC, que puede implementar rápidamente la vinculación de formulario, el editor de atributos, la internacionalización y otras funciones.
Método de formulario de carga:
// html: <form de formación enchype = "multipart/form-data" método = "post" acción = "/sell/imageUpload"> <div> <button type = "botón" botón "data-dismiss =" modal "aria-hidden =" true "> </button> <h4 id =" mymodallabel "> editar información de productos </ h4> </iv> <viv> <biv> <hiv> <hiver> nombre: nombre: <tabrete/etiqueta: id = "edit_name" value = "$ {Goods.name}" name = "name"/> </div> <div> <lelbel> code: </etiqueta> <input id = "edit_sn" name = "sn" value = "$ {goods.sn}"/> </div> <div> <lelebel> peso: </etiqueta> <input id = "edit_weight" name = "peso" value " </div> <div> <label> MarketPrice: </selabel> <input id = "edit_marketPrice" name = "marketPrice" value = "$ {goods.marketPrice}"/> </div> <div> <label> shopPrice: </label> <input id = "edit_shopPrice" name = "thopice" Valor = "$ {Goods.shopPrice}/"/Incit> "/Intin <Lelicta> Unit: </label> <input ID = "edit_unit" name = "unit" value = "$ {goods.unit}"/> </div> <div> <label> número: </label> <input id = "edit_number" name = "number" value = "$ {goods.number}"/> </div> <div> <!-<formul Action = "/Sell/ImageUpload"> <input ype = "Hidden" id = "edit_goods_sn" name = "sn" value = "$ {goods.sn}"/>-> image <input type = "file" id = "edit_image" name = "archivo"/> <input type = "someter" valor = "cargar"/> <!-</</"</hiv hiv> hiv> hiv> hiv> hiv> hiv> hiv> hiv> <biv> <bivin> <borm> <borm> Form <button type = "Botton" data-dismiss = "modal"> Close </boton> <input type = "subt" id = "edit_save" value = "enviar"> enviar cambios </ input> </div> </form> // controlador @requestmapping (valor = "/salvar", método = requestmethod.post) string de string haveGoodspage (@requestparam (value = "ID" ID ", requestmethod) id,@requestparam (valor = "nombre", requerido = falso) nombre de cadena,@requestparam (valor = "sn", requerido = false) cadena sn, @requestparam (valor = "número", requerido = false) numero,@requestparam (valor = "peso", requerido = false) string weight, @requestparam (value = "marketPrice", requerir = false) string marketprice,@requestparam (value) ShopPrice, @RequestParam (valor = "unidad", requerido = false) Unidad de cadena, @RequestParam (valor = "detalle", requerido = false) Detalle, @requestparam (value = "file") multipartfile archivo) {if (! file.isEmpty ()) {try {buffeDoutPutPutPut out = new BufferingutputStream (new FileOutputStream (newOutput (newOutput (newOutput (newOutput (newOutput (newOutput (newOutput (newOutput (newOutput (newOutput (newOutput (newOutSeM (newOutSeM ()) Archivo ("src/main/recursos/static/images/product/" + sn + ".jpg"))); // Guarde la imagen en el directorio out.write (file.getBytes ()); out.flush (); out.close (); Cadena filename = "/// imágenes /// producto ///" + sn + ".jpg"; /*user.settupian(fileName); //userRepository.save(user) ;//add user*/} catch (FileNotFoundException e) {E.PrintStackTrace (); devolver "Error de carga", + E.getMessage (); } catch (ioException e) {E.PrintStackTrace (); devolver "Error de carga" + E.GetMessage (); }} //...Other Operations}Suplemento: ¿Hay alguna diferencia entre las expresiones variables y las expresiones de asterisco?
No hay diferencia entre los dos sin considerar el contexto; La evaluación de sintaxis de asterisco se expresa en el objeto seleccionado, no en el contexto completo ¿Cuál es el objeto seleccionado? Es el valor de la etiqueta principal, como sigue:
<Div th: object = "$ {session.user}"> <p> name: <span th: text = "*{FirstName}"> Sebastian </span>. </p> <p> Apellido: <span th: text = "*{LastName}"> Pepper </span>. </p> <p> nacionalidad: <span th: text = "*{nacionalidad}"> Saturno </span>. </p> </div>Esto es exactamente equivalente a:
<div th: object = "$ {session.user}"> <p> name: <span th: text = "$ {session.user.firstname}"> Sebastian </span>. </p> <p> Apellido: <span th: text = "$ {session.user.lastnam th: text = "$ {session.user.nationality}"> Saturn </span>. </p> </div>Por supuesto, el signo de dólar y la sintaxis de asterisco se pueden mezclar:
<Div th: object = "$ {session.user}"> <p> name: <span th: text = "*{firstName}"> Sebastian </span>. </p> <p> Sellame: <span th: text = "$ {session.user.lastName}"> pepper </span>. </p> <p> nacionality: <span th: text = "*{nacionalidad}"> Saturno </span>. </p> </div>Resumir
Lo anterior son los pasos de operación para cargar la imagen de Spring Boot Thymeleaf para usted. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!