对Freemarker eclipse插件代码提示配置

February 13, 2015

继续阅读

关于Freemarker,功能很强大,但好用的eclipse插件却非常少。曾经用Jboss的那个插件,居然对Freemarker的部分标签不兼容。比如${user??}编辑器居然报错!后来发现了另一款插件:

hudson.freemarkeride0.9.14

这也是我目前正在使用的一款插件,个人感觉还不错,关键字高亮显示了,代码提示也有了。只是这玩意儿在代码提示上很不智能。比如:

  • 在一个ftl文件中使用java对象时,不能提示出这个对象的属性。如${user.name}。输入user.后不会将name进行补全
  • 在一个ftl文件中定义一个macro,另一个文件中使用这个macro时,鼠标移上去,按住ctrl键不能直接定位带该macro定义的地方。这导致,实际开发中要找某个macro的代码非常麻烦,还得动用eclipse的搜索功能!

今天本来想对这个插件进行二次开发,查看其源代码时,居然发现其对上述功能是支持的,只是需要配置!于是到网上找了一大圈,终于搞定了,现分享给大家。

在项目根目录新建一个.freemarker-ide.xml(注意文件名前面有一个".",并与.project在同一目录)。代码如下:

<config>
    <context-values>
        <!-- 该配置可以使path对应的文件中,如果使用key对象时,会自动补全其对应的java属性(通配符无效) -->
        <resource path="src/main/webapp/WEB-INF/template/userList.ftl">
            <value key="loan" object-class="net.domain.UserDO"/>
        </resource>
        <!-- 其余resource配置…… -->
    </context-values>
    <macro-library>
        <!-- 该配置可以使namespace命名空间下的所有macro、function自动补全 -->
        <entry namespace="component" path="src/main/webapp/WEB-INF/template/macro/component/component.ftl" project="web2.0" type="file"/>
        <!-- 其余macro-library配置…… -->
    </macro-library>
</config>

现在,在userList.ftl文件中,我们只需要输入${user.}就会自动弹出其java类中定义的属性了。

再将原来导入componet.ftl的命令:

<#include "/macro/component/component.ftl">

改为:

<#import "/macro/component/component.ftl" as component>

这样,我们就为component中的macro定义了一个命名空间 component(注意命名空间的名字要跟配置中的一样)。现在我们使用component中的macro,只需要输入<@component.就会自动弹出component.ftl文件中定义的macrofunction。而且将鼠标移上去,点击可以直接跳到定义的地方!

注意:如果 你在.freemarker-ide.xml中配置了你正在编辑的ftl文件,需要将文件关闭后,重新打开,编辑器才能读取到配置信息,代码提示 才能生效!