途径的你 2019-05-28 09:19 采纳率: 0%
浏览 416

thymeleaf 3定义标签怎样处理异步加载的标签元素

在springboot2+thymeleaf 3使用自定义标签时候;是在页面一加载就会去判断自定义标签的;可是有些的标签内容是异步加载过来的;加载完后没有去进行判断怎么办?

package com.netmarch.config;

import org.springframework.stereotype.Component;
import org.thymeleaf.dialect.AbstractProcessorDialect;
import org.thymeleaf.dialect.IProcessorDialect;
import org.thymeleaf.processor.IProcessor;
import org.thymeleaf.standard.StandardDialect;

import java.util.HashSet;
import java.util.Set;

/**
 * 自定义标签_声明方言
 * @author sly
 * @time 2019年1月24日
 */
@Component
public class MyTagDialect extends AbstractProcessorDialect implements IProcessorDialect {
    private static final String PREFIX = "mt";
    public MyTagDialect() {
        super("My tag", PREFIX, StandardDialect.PROCESSOR_PRECEDENCE);
    }
    @Override
    public Set<IProcessor> getProcessors(String dialectPrefix) {
        Set<IProcessor> processors = new HashSet<IProcessor>();
        processors.add(new MyTagProcessor(PREFIX));
        return processors;
    }

}

/**

  • 自定义标签_处理器
  • @author sly
  • @time 2019年1月24日
    */
    public class MyTagProcessor extends AbstractElementTagProcessor {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyTagProcessor.class);
    private static final int PRECEDENCE = 10000;
    private static final String TAG_NAME = "MyTag";
    public MyTagProcessor(String dialectPrefix) {
    super(
    // 此处理器将仅应用于HTML模式
    TemplateMode.HTML,
    // 要应用于名称的匹配前缀
    dialectPrefix,
    // 标签名称:匹配此名称的特定标签
    TAG_NAME,
    // 没有要应用于标签名称的前缀
    false,
    // 无属性名称:将通过标签名称匹配
    null,
    // 没有要应用于属性名称的前缀
    false,
    // 优先(内部方言自己的优先)
    PRECEDENCE);
    }

    @Override
    protected void doProcess(ITemplateContext context, IProcessableElementTag tag,
    IElementTagStructureHandler structureHandler) {
    //获取元素名称
    LOGGER.info(tag.getElementCompleteName());
    WebEngineContext context2 = (WebEngineContext)context;
    HttpServletRequest request = context2.getRequest();
    Set

    funs = (Set)request.getSession().getAttribute("funs");
    if(funs != null && funs.size() > 0){
    IAttribute funid = tag.getAttribute("funid");
    LOGGER.info("匹配上:" + funid.getValue());
    if (!funs.contains(funid.getValue())) {
    structureHandler.removeElement();
    }else {
    structureHandler.removeTags();
    }
    }else{
    structureHandler.removeElement();
    }
    }
    }

图片说明

就是这里的编辑删除的后续ajax异步加载过来的该怎样去后台doProcess中进行判断呢
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 21:49
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Spring Boot 2.1.x版本及以上,Thymeleaf提供了@PostConstruct注解来帮助你处理异步加载的标签元素。这个注解会在类加载完成后执行。

    以下是如何在你的MyTagDialect类中添加这个注解的例子:

    @PostConstruct
    public void init() {
        this.doProcess();
    }
    

    然后,在你的MyTagProcessor类中,你可以像之前一样使用super()方法来调用父类的方法。现在,当你的标签元素被渲染时,这些标签元素将在页面加载完成后被解析和渲染。

    请注意,如果你正在使用的是旧版本的Spring Boot(例如2.x),则可能无法直接使用@PostConstruct注解。在这种情况下,你需要手动地在页面加载完成后执行你的逻辑。

    例如,你可以这样做:

    public class MyTagProcessor extends AbstractElementTagProcessor {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(MyTagProcessor.class);
    
        private static final int PRECEDENCE = 10000;
    
        private static final String TAG_NAME = "MyTag";
    
        @Override
        public void doProcess(ITemplateContext context, IProcessableElementTag tag,
                              IElementTagStructureHandler structureHandler) {
            super.doProcess(context, tag, structureHandler);
    
            WebEngineContext webEngineContext = (WebEngineContext) context;
            HttpServletRequest request = webEngineContext.getRequest();
            // ...
        }
    
        // ...
    
    }
    

    这会确保你在页面加载完成后才开始解析和渲染标签元素。

    评论

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证