Templates 带内容的thymeleaf自定义标记

Templates 带内容的thymeleaf自定义标记,templates,tags,thymeleaf,Templates,Tags,Thymeleaf,我不熟悉thymeleaf,我正在尝试创建一个web组件。我想要的是这样的东西: <components:panel><div>hi!</div></components:panel> 如果有人能帮助我,我将不胜感激:) 问候 Luis首先,我不认为仅仅使用AbstractElementTag处理器是可能的。根据,这类处理器“仅在打开/独立标记事件上执行(没有处理器可用于关闭标记),并且没有(直接)访问元素体的权限。” 我通过AbstractEl

我不熟悉thymeleaf,我正在尝试创建一个web组件。我想要的是这样的东西:

<components:panel><div>hi!</div></components:panel>
如果有人能帮助我,我将不胜感激:)

问候
Luis首先,我不认为仅仅使用AbstractElementTag处理器是可能的。根据,这类处理器“仅在打开/独立标记事件上执行(没有处理器可用于关闭标记),并且没有(直接)访问元素体的权限。”

我通过
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"));
  }
}
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? 

    } 
} 
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"));
  }
}