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