### 1、定义方言Dialect
继承AbstractProcessorDialect
```
public class PagingDialect extends AbstractProcessorDialect {
private static final String DIALECT_NAME = "PagingDialect";//定义方言名称
public PagingDialect() {
super(DIALECT_NAME, "paging", StandardDialect.PROCESSOR_PRECEDENCE);
//优先级:值必须为:StandardDialect.PROCESSOR_PRECEDENCE
}
@Override
public Set getProcessors(String dialectPrefix) {
Set processors = new HashSet();
//添加我们定义的标签
processors.add(new PagingTagProcessor(dialectPrefix));
processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix));
return processors;
}
}
```
### 2、添加自定义处理程序Processor
继承AbstractElementTagProcessor
```
public class PagingTagProcessor extends AbstractElementTagProcessor {
private static final String TAG_NAME = "pager";//标签名
private static final int PRECEDENCE = 10000;//优先级,必须是10000,否则读取不到标签的赋值
public PagingTagProcessor(String dialectPrefix) {
super(
TemplateMode.HTML, // 此处理器将仅应用于HTML模式
dialectPrefix, // 要应用于名称的匹配前缀
TAG_NAME, // 标签名称:匹配此名称的特定标签
true, // 没有要应用于标签名称的前缀
null, // 无属性名称:将通过标签名称匹配
false, // 没有要应用于属性名称的前缀
PRECEDENCE // 优先(内部方言自己的优先)
);
}
@Override
protected void doProcess(ITemplateContext context,
IProcessableElementTag tag,
IElementTagStructureHandler structureHandler) {
String url = ((WebEngineContext) context).getRequest().getRequestURL().toString();
String queryString = ((WebEngineContext) context).getRequest().getQueryString();
String pageUrl = "";
if (StringUtils.isEmpty(queryString)) {
pageUrl = url + "?page=";
} else {
pageUrl = url + "?" + queryString + "&page=";
}
ApplicationContext appCtx = SpringContextUtils.getApplicationContext(context);
//读取标签内容(当前页),注意标签必须是自带标签才能正常读取值
String pageIndexString = tag.getAttributeValue("value");
//读取标签内容(页码大小)
String pageSizeString = tag.getAttributeValue("size");
//读取标签内容(数据大小)
String totalSizeString = tag.getAttributeValue("rows");
}
}
```
### 3、使用@Bean注解完成方言注入
在SpringBoot Application类中加入注入
```
@Bean
public PagingDialect paging() {
return new PagingDialect();
}
```
### 4、页面应用
```
```
网友评论