啾啾就啾啾
2017-08-30 04:57
采纳率: 75%
浏览 7.3k
已采纳

springboot结合自定义标签库以及freemarker如何引入自定义标签库

第一个问题是我在后台创建类 extends TagSupport,并配置*.tld文件,项目是springboot,但是没有创建WEB-INF与web.xml,那这个配置与*.tld文件怎么放置与引用呢。
第二个问题是freemarker如何导入jsp标签并使用。

目录结构:
project
-src/main/java
-src/main/resource
-mapper
-public(静态资源文件)
-template(freemarker页面)
-src/test/java
-Maven xxx
-JRE xxx
-logs
-public
-src
-main(空文件夹)
-tes

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • Vane11 2017-09-06 07:12
    已采纳

    今天有空,看了下freemarker的代码流程,大概是可以兼容jsp的。私信不能发图,就这边说了。如果问题已经解决了,就当交流,看看吧
    c.tld为例
    1.项目目录是这样的,标签文件在这里
    图片说明
    2.boot代码配置是这样的
    图片说明
    3.html中的引用是这样的,"http://java.sun.com/jsp/jstl/core"为c.tld的uri
    图片说明
    4.html中的调用是这样的
    图片说明
    5.稍微试了上面几种标签,使用同一个标签,freemarker还是不同于jsp的,jsp自己有自己的实现机制。例如上面的foreach中没定义 var 属性,因为定义后freemarker并不能获取到。同理凡是其他含有类似var的属性的jsp标签,应该都是不行的
    其他的单纯功能性的标签,基本都可以,如上图的if标签(格式不同),when标签,单纯的foreach(无var)都可以运行,题主需要使用其他的话 可以自己尝试一下。但freemarker自己的功能已经完全可以了。。。兼容jsp很虐心
    6.补一张依赖图
    图片说明
    7.(逃,反正题主肯定也不会看这个问题了

    点赞 评论
  • 啾啾就啾啾 2017-08-30 05:05

    哇文件目录一团糟,其实目录就是想让你们清楚的传达*.tld文件我要放在哪个位置,哈哈别在意,如果不行的话评论下我再贴个目录出来

    点赞 评论
  • 鼠小 2017-08-30 05:08

    【1】template目录,,,你的项目里面有没有,,这个目录是放资源的,,放进去就应该可以访问。
    WEB-INF与web.xml,,,springboot里面貌似不需要(我创建的时候里面没有)

    网上还有中方法,价格配置类,你可以试试:链接:http://www.cnblogs.com/chry/p/5877979.html

     @Configuration
    public class MyWebAppConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/myResource/**").addResourceLocations("classpath:/myResource/");
            super.addResourceHandlers(registry);
        }    
    }
    

    【2】第二个问题,,你看看这个博客http://blog.csdn.net/coslay/article/details/37815659

    点赞 评论
  • Vane11 2017-08-31 06:47

    不知道是不是已经解决了问题,稍微试了下,普通的方式不太行得通。说一下思路 也许对题主有帮助
    springboot在非web模式下的项目下且使用了freemarker,想用freemarker也能使用jsp标签
    第一个尝试的是直接在freemarker的configure里进行添加,这样子操作能够使ftl文件政策 assgin tld文件,但解析的时候会报缺少objecgWapper类,大概这边还少了一步操作,这部分需要详细看下源码才能解决
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @PostConstruct
    public void loadClassPathTlds() {
        freeMarkerConfigurer.getTaglibFactory().setClasspathTlds(classPathTldList);
    }
    

    第二个尝试,就是直接修改源码,源码原本的获取方式是直接读取WEB-INFO下的web.xml文件,修改这个方式就好。这个尝试git上有人尝试过,但好像效果不好。
    其实还可以尝试一下,理解boot的web.xml文件的表达形式,应该也能达到目的
    上面几个思路,工作日没有时间深入研究,所以也只能算是给题主提个方向。日后有结果的话,再私信题主吧,如果没时间,然后忘记了,题主就当没这回事吧。。。(逃

    点赞 评论

相关推荐 更多相似问题