`

freemark 自定义标签 总结

 
阅读更多

参考:

http://grails.org/doc/latest/ref/Tags/select.html

http://freemarker.sourceforge.net/

 

调用:

<@d_select id="type_4" optionKey="position" optionValue="id" list=adSpaceBoList callBack="test();" value="4f0eabc9073c1f0de52b25d2" ></@d_select> 指定list对象名:list=adSpaceBoList;选项key对应集合中的属性:optionKey="position";选项value对应集合中的属性:optionValue="id";

 

实现类:

implements TemplateDirectiveModel

public void execute (Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
            throws TemplateException, IOException {

// id
        String id = MapUtils.getString(params, "id", "selectId");

// multiple

boolean multiple = Boolean.valueOf(MapUtils.getString(params, "multiple"));

// onEventName:默认有callback时为onChange
        String onEventName = MapUtils.getString(params, "onEventName","onChange");

 

Map<String, Object> templateContext = new HashMap<String, Object>();

//list
        Object temp = params.get("list");
        if(temp instanceof SimpleSequence){
            SimpleSequence lists = (SimpleSequence) params.get("list");

            templateContext.put("list",lists.toList());
        }
       
        //strList
        String strList = MapUtils.getString(params, "strList");// strList : 文字:1,图片:2
        if(StringUtils.isNotBlank(strList)){
            if(StringUtils.isNotBlank(strList)){
                templateContext.put("strList", Arrays.asList(strList.split(",")));
            }
        }
       
        //map
        SimpleHash map=(SimpleHash)params.get("map");
        if(null!=map){
            templateContext.put("map",map.toMap());
        }

 

templateContext.put("id", id);

//.....

 

        Template template = env.getConfiguration().getTemplate("/ftl/select.ftl");
        template.process(templateContext, env.getOut());

}

 

页面:

eval:把字符串当做ftl代码处理;处理后对象的值要以string的length来判断,如果直接用??,则对象为空 ;

 

<#list list as obj>
        <#if obj??>
            <#assign keys = ('obj.'+ optionKey) >
            <#assign values = ('obj.'+ optionValue) >
            <#if ((values?eval)?length gt 0 && (keys?eval)?length gt 0) >
                <option value="${values?eval}" <#if ((value??)&& value == values?eval) >selected</#if>>${keys?eval!''}</option>
            </#if>
        </#if>
    </#list>

 

最后,还要在项目里注册自定义的标签;

注册:
sothis.properties
sothis.freemarker.directive.d_select.class=com.fangjia.bkoff.util.SelectDirective

 

底层(部分):

private SothisConfig config;

 

String configLocation = filterConfig.getInitParameter("configLocation");
                if (null == configLocation) {
                    configLocation = "sothis.properties";
                }
                config = SothisConfig.initConfig(configLocation);

分享到:
评论

相关推荐

    Freemark模板使用

    为了使自定义标签在JSP中可用,你需要在`WEB-INF`目录下创建一个`tld`文件夹,并创建一个`.tld`文件(例如`my-tags-tld.tld`)。`tld`文件定义了你的自定义标签库,包括描述、显示名称、版本等信息。尽管在示例中...

    freemark标签运用

    ### Freemark标签运用知识点 #### 一、Freemarker简介 Freemarker 是一款功能强大的模板引擎,由 Apache 软件基金会所维护的一个开放源码项目。它主要用于生成动态 HTML 页面,但也支持生成 XML、Java 源代码等...

    freemark模板&模版技术

    2. 自定义标签库:支持自定义标签,可以扩展模板语言的功能。 3. 国际化支持:通过不同的消息资源文件实现多语言输出。 4. 缓存机制:提高性能,减少对服务器资源的消耗。 5. 高级控制结构:包括条件判断、循环、...

    Java使用freemark生成word

    FreeMarker支持更复杂的功能,如宏、指令、自定义标签等,这使得模板可以处理更复杂的逻辑。同时,Apache POI库提供了丰富的API,用于对Word文档进行更细致的控制,比如插入图片、设置样式等。 总结,使用Java和...

    freemark2.36

    标题"freemark2.36"指的是FreeMarker的版本号2.3.16,这可能是该软件的一个稳定版本。 FreeMarker的核心功能是将数据模型与HTML或其他格式的模板结合,生成动态内容。它的工作原理是将预先设计好的模板文件(.ftl...

    freemark中文文档

    4.4 输出处理:`&lt;@&gt;`和`&lt;#&gt;`标签用于输出处理,例如`&lt;@include file="header.ftl"&gt;`可以包含其他模板。 4.5 自定义函数:通过`freemarker.template.utility`包中的工具类或者自定义`DirectiveModel`,可以实现模板...

    freeMarket

    自定义宏标签 可以通过`&lt;#macro ...&gt;`创建自定义宏。 - **示例**: ```ftl ${color}"&gt;Hello ${person}! ``` 以上总结涵盖了`freeMarket`中常用的关键知识点及其实际应用示例,希望能帮助理解和掌握这...

    beetl 模板demo

    - **标签库**:可以自定义标签,增强模板的功能。 - **自动转义**:为防止XSS攻击,Beetl支持自动对输出内容进行转义。 - **缓存机制**:提高模板的渲染效率,减少不必要的计算。 3. **语法示例**: - 输出变量...

    java poi 填充word(合并单元格,添加图片,设置字号)(csdn)————程序.pdf

    总结来说,这段代码展示了如何使用Java POI库创建一个动态Word文档生成器,它能够根据查询结果填充数据,合并单元格,调整文本样式,以及插入图片。这个功能对于生成报告、证书或任何需要自定义文本和图像的文档非常...

    freemarker总结

    6、 用户自定义FTL指令:宏和变换器 7、 节点 节点变量表示为树型结构中的一个节点,通常在XML处理中使用。 在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey...

Global site tag (gtag.js) - Google Analytics