概述
自定义方言 两个类
/**
* Thymeleaf 方言
*/
@Component // 被spring管理
public class NumberToLetterDialect extends AbstractProcessorDialect {
private static final String DIALECT_NAME = "dialectName";
private static final String PREFIX = "prefix";
public NumberToLetterDialect() {
// 设置自定义方言与方言处理器优先级相同
super(DIALECT_NAME, PREFIX, StandardDialect.PROCESSOR_PRECEDENCE);
}
@Override
/**
* 元素处理器
* @param dialectPrefix 方言前缀
* @return
*/
public Set<IProcessor> getProcessors(String dialectPrefix) {
Set<IProcessor> processors = new HashSet<>();
// 添加自定义标签处理器
processors.add(new NumberToLetterDialectProcessor(dialectPrefix));
processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix));
return processors;
}
}
/**
* @author 李 磊
* 标签处理器
*/
public class NumberToLetterDialectProcessor extends AbstractAttributeTagProcessor {
// 标签名
private static final String TAG_NAME = "tagName";
// 属性名
private static final String ATTRIBUTE_NAME = "attributeName";
protected NumberToLetterDialectProcessor(String dialectPrefix) {
super(
// 此处理器将仅应用于HTML模式
TemplateMode.HTML,
// 标签前缀名 xxxx:text中的xxxx
dialectPrefix,
// 标签名称 匹配此名称的特定标签 null为不限制
TAG_NAME,
// 将标签前缀应用于标签名称
false, // true
// 标签前缀属性 如<xxxx:toLetter>
ATTRIBUTE_NAME,
// 开启属性名称前缀
true,
// 优先级和原生标签相同
StandardDialect.PROCESSOR_PRECEDENCE,
// 标签处理后是否移除自定义属性
true);
}
@Override
protected void doProcess(ITemplateContext context
, IProcessableElementTag tag
, AttributeName attributeName
, String attributeValue
, IElementTagStructureHandler structureHandler) {
// 使用shiro thymeleaf工具类获取属性值
// final String rawValue = ThymeleafFacade.getRawValue(tag, attributeName);
// 获取属性值
final IEngineConfiguration configuration = context.getConfiguration();
final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration);
final IStandardExpression expression = parser.parseExpression(context, attributeValue);
final Object rawValue = String.valueOf(expression.execute(context));
// 获取标签名
// final String elementCompleteName = tag.getElementCompleteName();
// 创建模型
final IModelFactory modelFactory = context.getModelFactory();
final IModel model = modelFactory.createModel();
// 添加模型 标签
model.add(modelFactory.createOpenElementTag("h1"));
model.add(modelFactory.createText(NumberToLetterConverter(rawValue)));
model.add(modelFactory.createCloseElementTag("h1"));
// 替换页面标签
structureHandler.replaceWith(model, false);
// 只改变标签内数据
// structureHandler.setBody(NumberToLetterConverter(rawValue), false);
}
private String NumberToLetterConverter(String str) {
int i = Integer.valueOf(str);
char c;
String s = "";
if (i <= 26) {
// 将ASCII码转换成字母 我这里都是小写
c = (char) (i + 96);
s = String.valueOf(c);
} else if (i > 26) {
List<Character> numlist = new ArrayList<>();
// 单循环数大于26时 就在前加个啊 效果 27 : aa
int num = i / 26;
for (int a = 0; a < num; a++) {
numlist.add('a');
}
numlist.add((char) (i % 26 + 97));
for (Character character : numlist) {
s = s + new StringBuilder().append(character).toString();
}
}
return s;
}
}
使用方式
<tagName prefix:attributeName="1"></tagName>
->
<h1>a</h1>
自定义工具类 两个类
/**
* 参考文档
* https://www.thymeleaf.org/doc/tutorials/3.0/extendingthymeleaf.html#expression-object-dialects-iexpressionobjectdialect
*/
@Component
public class UtilDialect implements IExpressionObjectDialect {
@Override
public IExpressionObjectFactory getExpressionObjectFactory() {
return new IExpressionObjectFactory() {
@Override
public Set<String> getAllExpressionObjectNames() {
// 可为自定义工具类起多个名称 一个名称初始化一个对象
return new HashSet<String>() {{
add("util1");
add("util2");
}};
}
@Override
public Object buildObject(IExpressionContext context, String expressionObjectName) {
// System.out.println(expressionObjectName); // util名称
return new Util();
}
@Override
public boolean isCacheable(String expressionObjectName) {
return true;
}
};
}
@Override
public String getName() {
return "util";
}
}
/**
* @author 李磊
* @datetime 2020/01/26 19:30
* @description 测试工具类
*/
public class Util {
public String util(String content) {
return content + "util";
}
}
使用方式
<p th:utext="${#util1.util(1)}"></p><!-- 1util -->
<p th:utext="${#util2.util(2)}"></p><!-- 2util -->
最后
以上就是诚心盼望为你收集整理的Thymeleaf自定义方言&自定义工具类的全部内容,希望文章能够帮你解决Thymeleaf自定义方言&自定义工具类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复