Как внедрить JS-скрипт в движок шаблонов Qute

#quarkus #quarkus-qute

Вопрос:

Я использую Quarkus движок qute шаблонов. Мне нужно внедрить какой-нибудь динамический js скрипт для загрузки на HTML-страницу. Но qute конвертировать js так:

Файл шаблона hello.html :

 <!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>redirect by script</title>
    </head>
    <body>
        <p>Hi {name}!</p>
    <script>
        {script}
    </script>
    </body>
</html>
 

Контроллер

 @RequestScoped
public class Resource {
  @Inject
  @Location("hello.html")
  Template hello;

@Route(path = "/s/:name", methods = HttpMethod.GET)
  public Uni<String> rScript(RoutingContext rc) {
    String s = "console.log('Hi from script');";
    return Uni.createFrom().completionStage(() -> hello
            .data("name", rc.request().getParam("name"))
            .data("script", s)
            .renderAsync());
  }
}
 

Файл рендеринга шаблона, как показано ниже, и скрипт не будут запускаться в браузере:

 <!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>redirect by script</title>
    </head>
    <body>
        <p>NOT_FOUND!</p>
    <script>
        console.log(amp;#39;test redirect by scriptamp;#39;)
    </script>
    </body>
</html>
 

Как я могу передать данные скрипта qute в файл шаблона?

Ответ №1:

Вы захотите отключить экранирование символов:

Либо используйте raw :

     <script>
        {script.raw}
    </script>
    </body>
</html>
 

Или вернуть RawString :

 @Route(path = "/s/:name", methods = HttpMethod.GET)
  public Uni<RawString> rScript(RoutingContext rc) {
    String s = "console.log('Hi from script');";
    return Uni.createFrom().completionStage(() -> hello
            .data("name", rc.request().getParam("name"))
            .data("script", new RawString(s))
            .renderAsync());
  }
}