Generieren Sie JavaScript mit Thymeleaf

Überblick

Es ist eine Erinnerung, weil ich zufällig JavaScript mit Thymeleaf berührt habe.

Umgebung

OpenJDK 11.0.2 SpringBoot 2.3.4 Thymeleaf 3.0.11

Template Engine-Einstellungen

AppConfig.java


@Configuration
public class AppConfig {

    @Bean
    public TemplateEngine scriptTemplateEngine() {
        final TemplateEngine templateEngine = new TemplateEngine();
        templateEngine.setDialect(new SpringStandardDialect());
        templateEngine.setTemplateResolver(scriptTemplateResolver());

        return templateEngine;
    }

    private ITemplateResolver scriptTemplateResolver() {

        final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("/templates/scripts/");
        templateResolver.setSuffix(".js");
        templateResolver.setTemplateMode(TemplateMode.JAVASCRIPT);
        templateResolver.setCharacterEncoding("utf-8");
        templateResolver.setCacheable(false);
        templateResolver.setCheckExistence(true);

        return templateResolver;
    }
}

Erstellen Sie eine Vorlagendatei

resources/templates/scripts/sample.js


'use strict';

(() => {

    const rawData = [# th:text="${rawData}" /];
    const jsonData = [# th:text="${jsonData}" /]; 

    console.log(rawData);
    console.log(jsonData);

})();

Übergeben Sie zwei Variablen.

Controller-Einstellungen

SampleController.java


@Controller
@RequiredArgsConstructor
public class SampleController {

    private final TemplateEngine scriptTemplateEngine;
    private final ObjectMapper objectMapper;

    @GetMapping(value = "/app.js", produces = "text/javascript")
    @ResponseBody
    public String sample() throws JsonProcessingException {

        String path = "sample";

        Map<String, Object> map = new HashMap<>();
        map.put("id", 1);
        map.put("name", "Takeshi");
        List<Map<String, Object>> list = new ArrayList<>();
        list.add(map);

        Context ctx = new Context();
        ctx.setVariable("rawData", list);
        ctx.setVariable("jsonData", objectMapper.writeValueAsString(list));

        return scriptTemplateEngine.process(path, ctx);
    }
}

Erstellen Sie Daten mit sample (), übergeben Sie die Daten selbst und die in eine JSON-Zeichenfolge konvertierten Daten mit demselben Namen wie der Variablenname an die Prozessmethode und geben Sie sie zurück. Beachten Sie, dass beim Hinzufügen einer Abhängigkeit von thymeleaf-spring5 eine Bean zum automatischen Zurückgeben einer Ansicht mit dem Namen templateEngine erstellt wird. Bei Verwendung der in der Einstellungsdatei erstellten Bean muss DI mit dem zu diesem Zeitpunkt verwendeten Bean-Namen angegeben werden.

Ergebnis

Starten Sie die App und versuchen Sie, auf /app.js zuzugreifen. Screen Shot 2020-10-16 at 6.36.38.png

Ich konnte es sicher erstellen. Ich denke nicht, dass es viele Möglichkeiten gibt, JS dynamisch zu erstellen, sondern als Referenz.

Es scheint, dass Thymeleaf seit etwa zwei Jahren nicht mehr aktualisiert wurde. Hat die Entwicklung aufgehört?

Recommended Posts

Generieren Sie JavaScript mit Thymeleaf
Generieren Sie mit Spring Boot einen Barcode
Verwenden Sie Thymeleaf mit Azure-Funktionen
Programmierbar Logger mit Logback generieren
Behandle Daten mit Javascript (moment.js)
Zeichnen Sie den Bildschirm mit Thymeleaf in SpringBoot
Implementieren Sie einen Textlink mit Springboot + Thymeleaf
Geben Sie JavaScript in Thymeleaf 3 aus, ohne zu entkommen
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Zeitlose Suche mit Rails + JavaScript (jQuery)
Konvertieren Sie die C-Sprache mit Emscripten in JavaScript
So wechseln Sie Miniaturbilder mit JavaScript
Probieren wir WebSocket mit Java und Javascript aus!
Hallo Welt mit Java Template Engine Thymeleaf
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus