mq翻译主题模板中的代码 编程宝库

日期:2023-03-11 12:39:36 / 人气: 448 / 发布者:成都翻译公司

这些对象负责确定如何访问模板,在这个GTVG应用程序中,org.ServletContextTemplateResolver我们将从Servlet上下文中检索模板文件作为资源的方式:javax.模板引擎对象是org.模板解析器是唯一需要的参数TemplateEngine,尽管稍后将介绍许多其他参数(消息解析器,缓存大小等)。多语言文本我们的第一个任务是为我们的杂货网站创建一个主页。

Thymeleaf 主题商店

本指南的这一章和后续章节中显示的示例的源代码可以在 Good Thymes Virtual Grocery GitHub 存储库中找到。

1. 网上商店

为了更好地解释使用 Thymeleaf 处理模板所涉及的概念mq翻译主题模板中的代码,本教程将使用可从项目网站下载的演示应用程序。

这个应用程序是一个虚构的虚拟杂货网站,将为我们提供许多场景来展示 Thymeleaf 的许多功能。

首先,我们的应用程序需要一组简单的模型实体:通过创建产品进行销售。我们还将管理这些:CustomersOrdersCommentsProducts。

我们的应用程序还有一个非常简单的服务层,由包含以下方法的 Service 对象组成:

public class ProductService {
    ...
    public List findAll() {
        return ProductRepository.getInstance().findAll();
    }
    public Product findById(Integer id) {
        return ProductRepository.getInstance().findById(id);
    }
}

在 web 层,我们的应用程序将有一个过滤器,它将根据请求 URL 将执行委托给启用了 Thymeleaf 的命令:

private boolean process(HttpServletRequest request, HttpServletResponse response)
        throws ServletException {
    try {
        // This prevents triggering engine executions for resource URLs
        if (request.getRequestURI().startsWith("/css") ||
                request.getRequestURI().startsWith("/images") ||
                request.getRequestURI().startsWith("/favicon")) {
            return false;
        }
        /*
         * Query controller/URL mapping and obtain the controller
         * that will process the request. If no controller is available,
         * return false and let other filters/servlets process the request.
         */
        IGTVGController controller = this.application.resolveControllerForRequest(request);
        if (controller == null) {
            return false;
        }
        /*
         * Obtain the TemplateEngine instance.
         */
        ITemplateEngine templateEngine = this.application.getTemplateEngine();
        /*
         * Write the response headers
         */
        response.setContentType("text/html;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        /*
         * Execute the controller and process view template,
         * writing the results to the response writer.
         */
        controller.process(
                request, response, this.servletContext, templateEngine);
        return true;
    } catch (Exception e) {
        try {
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        } catch (final IOException ignored) {
            // Just ignore this
        }
        throw new ServletException(e);
    }
}

这是我们的 IGTVGController 接口:

public interface IGTVGController {
    public void process(
            HttpServletRequest request, HttpServletResponse response,
            ServletContext servletContext, ITemplateEngine templateEngine);    
}

我们现在要做的就是创建 IGTVGController 接口的实现,从服务中检索数据并使用 ITemplateEngine 对象来处理模板。

但首先让我们看看模板引擎是如何初始化的。

2. 创建和配置模板引擎

我们过滤器中的 process(...) 方法包含以下几行:

ITemplateEngine templateEngine = this.application.getTemplateEngine();

这意味着 GTVGApplication 类负责创建和配置 Thymeleaf 应用程序中*重要的对象之一:TemplateEngine 实例(ITemplateEngine 接口的实现)。

我们的 org.thymeleaf.TemplateEngine 对象初始化如下:

public class GTVGApplication {
    ...
    private final TemplateEngine templateEngine;
    ...
    public GTVGApplication(final ServletContext servletContext) {
        super();
        ServletContextTemplateResolver templateResolver =
                new ServletContextTemplateResolver(servletContext);
        // HTML is the default mode, but we set it anyway for better understanding of code
        templateResolver.setTemplateMode(TemplateMode.HTML);
        // This will convert "home" to "/WEB-INF/templates/home.html"
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        // Template cache TTL=1h. If not set, entries would be cached until expelled
        templateResolver.setCacheTTLMs(Long.valueOf(3600000L));
        // Cache is set to true by default. Set to false if you want templates to
        // be automatically updated when modified.
        templateResolver.setCacheable(true);
        this.templateEngine = new TemplateEngine();
        this.templateEngine.setTemplateResolver(templateResolver);
        ...
    }
}

有很多方法可以配置 TemplateEngine 对象,但是现在这几行代码足以告诉我们所需的步骤。

3. 模板解析器

让我们从模板解析器开始:

ServletContextTemplateResolver templateResolver =
        new ServletContextTemplateResolver(servletContext);

模板解析器是一个实现 Thymeleaf API 接口的对象,名为 org.thymeleaf.templateresolver.ITemplateResolver:

public interface ITemplateResolver {
    ...
    /*
     * Templates are resolved by their name (or content) and also (optionally) their
     * owner template in case we are trying to resolve a fragment for another template.
     * Will return null if template cannot be handled by this template resolver.
     */
    public TemplateResolution resolveTemplate(
            final IEngineConfiguration configuration,
            final String ownerTemplate, final String template,
            final Map templateResolutionAttributes);
}

这些对象负责确定如何访问模板。在这个 GTVG 应用程序 org.thymeleaf.templateresolver.ServletContextTemplateResolver 中,我们将从 Servlet 上下文中检索模板文件作为资源: javax.servlet.ServletContext 存在于每个 Java Web 应用程序中 应用程序范围的对象和资源是从 Web 应用程序根解析的.

但这并不是我们可以说的模板解析器的全部,因为我们可以在其上设置一些配置参数。一、模板模式:

templateResolver.setTemplateMode(TemplateMode.HTML);

HTML 是默认模板模式 ServletContextTemplateResolver,但*好构建它,以便我们的代码清楚地记录正在发生的事情。

templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");

修改前缀和后缀,我们将模板名称传递给引擎,以获取真正要使用的资源名称。

使用此配置,模板名称“产品/列表”将对应于:

servletContext.getResourceAsStream("/WEB-INF/templates/product/list.html")

(可选)在模板解析器中通过 cacheTTLMs 属性配置解析模板可以在缓存中存活的时间量:

templateResolver.setCacheTTLMs(3600000L);

如果达到*大缓存大小并且它是当前缓存中*旧的条目,则在达到 TTL 之前,模板仍然可以从缓存中排除。

用户可以通过实现 ICacheManager 接口或修改 StandardCacheManager 对象来定义缓存行为和大小来管理默认缓存。

关于模板解析器还有很多需要学习,但现在让我们看看模板引擎对象的创建。

4. 模板引擎

模板引擎对象是 org.thymeleaf.ITemplateEngine 接口的实现。其中一个实现由 Thymeleaf 核心提供:org.thymeleaf.TemplateEngine 我们在这里创建一个实例:

templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);

很简单mq翻译主题模板中的代码,不是吗?我们所需要的只是创建一个实例并将模板解析器设置为它。

模板解析器是唯一需要的参数TemplateEngine,虽然很多其他参数(消息解析器、缓存大小等)会在后面介绍。现在这就是我们所需要的。

我们的模板引擎现已准备就绪,我们可以使用 Thymeleaf 开始创建页面。

下一节:Thymeleaf 文字 Thymeleaf 教程

1. 多语言文本 我们的第一个任务是为我们的杂货网站创建一个主页。这个页面的第一个版本非常简单:只有标题和欢迎信息。这是我们的 /WEB-INF/templates/home.html 文件:

相关阅读Relate

  • 法国签证营业执照翻译件模板 你与申根签证只有一条推送的距离
  • 江苏省增值税发票翻译模板 江苏税务局出口货物退(免)税申报管理系统软件
  • 肄业证书翻译模板 复旦大学学生学业证明文书管理细则(试行)
  • 四级英语作文模板带翻译 大学英语四级翻译模拟训练及答案
  • 社会某信用代码证翻译模板 js验证某社会信用代码,某社会信用代码 验证js,js+验证+社会信用代码证
  • 美国移民证件翻译模板 日语签证翻译聊聊身份证翻译模板
  • 翻译软件模板 人类史上*实用的的文档快速翻译指南
  • 江苏省增值税发票翻译模板 江苏出口货物退(免)税申报管理服务平台
  • 瑞士签证房产证翻译件模板 瑞士探亲签证—就读子女
  • 日语户口本翻译模板 户口本翻译价格_户口本翻译一般多少钱?
  • mq翻译主题模板中的代码 编程宝库 www.chinazxzy.com/fymb/4853.html
    
    本站部分内容和图片来源于网络用户和读者投稿,不确定投稿用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的权利,请联系:chinazxzy@163.com,及时删除。
    Go To Top 回顶部
    • 扫一扫,微信在线