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

带内容的thymeleaf自定义标记

汤洋
2023-03-14

我是thymeleaf的新手,我正试图创建一个web组件。我想要的是这样的东西:

<components:panel><div>hi!</div></components:panel>
<div class="panel"><div class="contents"><div>hi!</div></div></div>
public class PanelTagProcessor extends AbstractElementTagProcessor { 

    private static final String ELEMENT_NAME = "panel"; 
    private static final int PRECEDENCE = 10000; 

    public PanelTagProcessor(final String dialectPrefix) { 
        super(TemplateMode.HTML, "components", ELEMENT_NAME, true, null, false, PRECEDENCE); 
    } 

    @Override 
    protected void doProcess(ITemplateContext context, IProcessableElementTag tag, 
        IElementTagStructureHandler structureHandler) { 

        // How could I surround contents inside the tag with custom nodes? 

    } 
} 

向路易斯问好

共有1个答案

杜良骏
2023-03-14

首先,我认为仅仅使用一个AbstracTelementTagProcessor是不可能的。根据文档,这类处理器“只对open/standalone标记事件执行(没有处理器可以应用于close标记),并且没有(直接)对元素主体的访问。”

我设法让它在AbstractelementModelProcessor(“以IModel对象的形式执行完整的元素,包括它们的主体”)中工作,所以下面是对我有效的方法。

public class PanelTagProcessor extends AbstractElementModelProcessor {

  private static final String TAG_NAME = "panel";
  private static final int PRECEDENCE = 10000;

  public PanelTagProcessor(String dialectPrefix) {
    super(TemplateMode.HTML, dialectPrefix, TAG_NAME, true, null, false, PRECEDENCE);
  }

  @Override
  protected void doProcess(ITemplateContext itc, IModel imodel, IElementModelStructureHandler iemsh) {
    IModelFactory modelFactory = itc.getModelFactory();
    imodel.replace(0, modelFactory.createOpenElementTag("div", "class", "panel"));
    imodel.insert(1, modelFactory.createOpenElementTag("div", "class", "contents"));
    imodel.insert(imodel.size() - 2, modelFactory.createCloseElementTag("div"));
    imodel.replace(imodel.size() - 1, modelFactory.createCloseElementTag("div"));
  }
}
 类似资料:
  • 基础 content 渲染 <vuep template="#exampleContent"></vuep> <template> <div class="amap-page-container"> <el-amap vid="amapDemo" :center="center" :zoom="zoom" class="amap-d

  • 我正在尝试实现一个功能,显示最近创建的5个事件。我决定用Django自定义模板标记实现这一点(如果这不是最好的方法,请告诉我)。到目前为止我所掌握的是: 在eventsearch_extra.py中: 这里我的问题是,queryset“recents”似乎返回到模板中为空。“count:”不显示任何内容&for循环默认值为“no recent events”。

  • 我想用自定义标记制作地图。在APIV2中,我可以为标记设置图标、标题等。但我想在一开始就显示带有标记的标题。现在标题显示只有当我磁带标记。在v1中是覆盖,但在v2中我没有发现任何类似的东西。 编辑:也许我说得不够清楚。API中类似的东西只对一个标记起作用。我无法同时显示所有标记的信息窗口。无论如何,我需要显示我的所有标记的标题,而不等待用户将点击它。

  • 我使用的是spring Boot2.1.6,Release and swagger 2.9.2,除了我想简化内容之外,一切都很好。 首先,我想删除标题下的: 而且,我希望和在访问时打开,直到我单击名称。

  • 本文向大家介绍SpringBoot使用Thymeleaf自定义标签的实例代码,包括了SpringBoot使用Thymeleaf自定义标签的实例代码的使用技巧和注意事项,需要的朋友参考一下 此篇文章内容仅限于 描述springboot与 thy 自定义标签的说明,所以你在看之前,请先会使用springboot和thymeleaf!! 之前写过一篇是springMVC与thymeleaf 的自定义标签

  • 我试图获得一个带有自定义图标的JFrame,但没有任何效果。下面是我现在看到的Java 11: