当前位置: 首页 > 知识库问答 >
问题:

带片段的Thymeleaf定制方言

年高洁
2023-03-14
<input th:replace="component/admin_form :: text (formElement = ${vm.getElementStatus()}, class='css-class-a'))" />

上面的代码生成一个复杂的带有标签、输入字段和错误块的div块。

我想简化这个语法。我的想法是用一个自定义标记创建一个自定义方言,并写如下:

<admin-form:text value="${vm.getElementLastName()}" class="css-class-a"/>

第二个更容易阅读,它清楚地向设计者表明这是一个特殊的元素。除此之外,更改主题会更容易,因为我只需要更改标记处理器中具体的片段位置,而不是数百个th:replace值。

@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag, IElementTagStructureHandler structureHandler) {
    final IModelFactory modelFactory = context.getModelFactory();
    final IModel model = modelFactory.createModel();

    model.add(modelFactory.createOpenElementTag("div", "class", "test"));
    model.add(modelFactory.createText("This is my custom element"));
    model.add(modelFactory.createCloseElementTag("div"));

    structureHandler.replaceWith(model, false);
} 

共有1个答案

雍焱
2023-03-14

您的 标记的doProcess可以创建一个带有th:replace属性的虚拟标记,该属性包括“复杂输入”片段:

Map<String, String> attributes = new HashMap<>();
attributes.put("th:replace", "/pathToMyFragment/complexInput::myfragname");
IOpenElementTag newTag = modelFactory.createOpenElementTag("div", attributes, AttributeValueQuotes.DOUBLE, false);
model.replace(0, newTag);

或者类似的东西(注意关闭标签等等)。

其结果将是替换

<admin-form:text/>
<div th:replace="/pathToMyFragment/complexInput::myfragname"></div>
 类似资料:
  • 我正在创建一种自定义方言来替换

  • 我正在基于模板进行查看,但在某些区域我想输入片段。 模板:base。html 查看:列表。html 片段:片段/init.html 对于头部碎片,它可以正常工作。但在页脚中,但在页脚中,将显示模板的代码。 输出: 我希望你能帮助我。提前感谢。 使现代化 基础html 列表html init.html 输出: 我设法在页脚中包含代码片段,但我的目标是替换它。 解决方案:

  • 我的自定义方言与处理器不解析任何值,我不知道为什么。在生成的视图中,${Content}应该在的地方没有任何东西,在将标签更改为th: text后,它会出现。我使用Spring Boot v1.5.9。发布,Springv4.3.13。发布 pom.xml依赖(它的子模块) LineSeparator处理器。JAVA 我的方言。JAVA 胸腺onfiguration.java 看法html

  • 我正在用Spring MVC3.2和Thymeleaf模板引擎构建应用程序。我是沉香酒的初学者。 我有一切工作,包括Thymeleaf,但我想知道是否有人知道一个简单明了的图图如何做简单的Ajax请求控制器,结果只呈现一个模板的一部分(片段)。

  • 如果包含一个与之匹配的值,则一切正常。 从返回 如果片段不存在,AbstractStandardFragmentInsertionTagProcessor#ComputeFragment似乎总是失败。 我对Thymeleaf很陌生,所以我可能错过了一些相当基本的东西。

  • 我正在尝试用Thymeleaf创建纯文本和HTML的电子邮件模板。因为我不想复制公共部分,所以我想单独定义这些部分,并将它们插入到更具体的模板中。 它适用于超文本标记语言,但对于普通文本变量中的公共部分不被替换: 超文本标记语言 > 具体的html 纯文本 > header.txt 页脚。文本 具体的文本 后果 对于超文本标记语言,这一切都很好,但是对于纯文本版本,插入的模板中的变量不会被替换: