gradle mysql方言_springboot+thymeleaf 实现thymeleaf自定义方言系统 自定义标签, cms系统搭建(二)...

上节给大家介绍了thymeleaf自定义方言中 自定义标签的实现方式 但是如果存在下面这段代码的需求的话,自定义标签就无法满足了,因为代码中的 input是html的标签,我们无法对其自定义,但我们可以自定义它的属性,来完成业务需求。

Insert title here

[html] view plain copy

[html] view plain copy

首先我们需要继承AbstractAttributeTagProcessor类,重写doProcess(),具体代码如下:

package com.phxl.cms.TagProcessor;

import org.springframework.context.ApplicationContext;

import org.thymeleaf.IEngineConfiguration;

import org.thymeleaf.context.ITemplateContext;

import org.thymeleaf.engine.AttributeName;

import org.thymeleaf.model.IProcessableElementTag;

import org.thymeleaf.processor.element.AbstractAttributeTagProcessor;

import org.thymeleaf.processor.element.IElementTagStructureHandler;

import org.thymeleaf.spring4.context.SpringContextUtils;

import org.thymeleaf.standard.expression.IStandardExpression;

import org.thymeleaf.standard.expression.IStandardExpressionParser;

import org.thymeleaf.standard.expression.StandardExpressions;

import org.thymeleaf.templatemode.TemplateMode;

import com.phxl.cms.entity.Matter;

import com.phxl.cms.mapper.MatterMapper;

public class TagProcessor extends AbstractAttributeTagProcessor{

private static final String ATTR_NAME = "m_id";//属性名称

private static final int PRECEDENCE = 10000;//同一方言中的优先级

public TagProcessor(final String dialectPrefix) {

super(

TemplateMode.HTML, // 此处理器将仅应用于HTML模式

dialectPrefix, // 要应用于名称的匹配前缀

null, // 无标签名称:匹配任何标签名称

false, // 没有要应用于标签名称的前缀

ATTR_NAME, // 将匹配的属性的名称

true, // 将方言前缀应用于属性名称

PRECEDENCE, // 优先(内部方言自己的优先)

true); // 之后删除匹配的属性

}

@Override

protected void doProcess(

final ITemplateContext context, final IProcessableElementTag tag,

final AttributeName attributeName, final String attributeValue,

final IElementTagStructureHandler structureHandler) {

ApplicationContext appCtx = SpringContextUtils.getApplicationContext(context);

MatterMapper mapper=appCtx.getBean(MatterMapper.class);

final IEngineConfiguration configuration = context.getConfiguration();

/*

* 获得Thymeleaf标准表达式解析器

*/

final IStandardExpressionParser parser =

StandardExpressions.getExpressionParser(configuration);

/*

* 将属性值解析为Thymeleaf标准表达式

*/

final IStandardExpression expression = parser.parseExpression(context, attributeValue);

/*

* 执行刚刚解析的表达式

*/

final Integer position = (Integer) expression.execute(context);

/*

* 将获取的值,进行业务处理。

*/

Matter matter=mapper.tagSelectByMid(position);

String matterName = null;

if (null != matter) {

matterName = matter.getMatterTitle();

}

/*

* 将新值设置为“标签”属性

*/

if (matterName != null) {

if (attributeValue != null) {

structureHandler.setAttribute("value", matterName);

}

}

}

}

最后在CmsDialect方言处理器中 实例化该类

processors.add(new TagProcessor(dialectPrefix));//标签事件

不知道CmsDialect类的 可以看上节 https://my.oschina.net/u/3700119/blog/1545367

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值