java积累(二)----freemarker把jsp页面转换成html需要注意的地方---freemarker的坑
2016-11-18 14:24
447 查看
有时候为了方便页面分享,我们需要把页面保存成静态资源html来保存,我们可以通过freemarker实现。
具体实现方法这里就不详细说了,主要还是在jsp页面中绑定数据,然后服务端通过freemarker转换后自动上传到指定的静态资源服务器即可。
现在需要讲讲freemarker中的坑,因为freemarker在转换过程中 很多语法是不能通过编译的,所以如果不注意的话,那在jsp页面的数据绑定中会出很多问题。
但是 如果这个jsp页面是需要freemarker转换成html的话 session的数据是无效的, 会在转换过程中报找不到。
比如使用循环应该使用
<#list 1..11 as t>
</#list>
判断相等使用
<#if type == "simple">
</#if>
<#if type != "simple">
</#if>
获取map的值
typeMap['2']
切记在webwork自带的freemarker中对Map中Key的定义为String类型(如果你想用${Map[key]}这样取值的话;如果用${Map.get(key}这样取值就可以用其他类型,如Map<Long,Object>)。否则会一直找不到对应值,一直报错。
判断对象是否存在(null)经常会用到,如果对象 != null 则xxxx,在freemarker中表达比较奇怪,例如判断 target 是否为null,如果不为 nll 则做xxx动作<#if typeMap['2']??> xxxx</#if>
resultMap
typeMap
idMap
都是<String,String>的map。
现在我把它们循环输出11个。
<#list 1..11 as t>
<#if shareName[t?string]??&&resultMap[shareName[t?string]]??&&typeMap[shareName[t?string]]??&&idMap[shareName[t?string]]??>
<li class="<#if t !=11>bdb1px</#if>" data="${requestHost}/report/${typeMap[shareName[t?string]]}/${idMap[shareName[t?string]]}">
<span class="cloud-result-tdleft">${shareName[t?string]}</span>
<span class="cloud-result-tdright">${resultMap[shareName[t?string]]}</span>
</li>
</#if>
</#list>
具体实现方法这里就不详细说了,主要还是在jsp页面中绑定数据,然后服务端通过freemarker转换后自动上传到指定的静态资源服务器即可。
现在需要讲讲freemarker中的坑,因为freemarker在转换过程中 很多语法是不能通过编译的,所以如果不注意的话,那在jsp页面的数据绑定中会出很多问题。
坑一:freemarker识别不了session数据
我们在一般的jsp页面中 可以绑定session中的数据,也可以绑定model中的数据。但是 如果这个jsp页面是需要freemarker转换成html的话 session的数据是无效的, 会在转换过程中报找不到。
坑二:jsp页面的语法需要用freemarker语法
freemarker转换的jsp页面中数据绑定语法需要按照freemarker的语法,而不是jsp的语法,也就是不能用c标签<c:if>这些。比如使用循环应该使用
<#list 1..11 as t>
</#list>
判断相等使用
<#if type == "simple">
</#if>
<#if type != "simple">
</#if>
获取map的值
typeMap['2']
坑三: 传递到jsp页面的Map最好是<String,String>类型
我一开始定义的是<Integer,String>类型,然后确定map中有对应的key,但是通过typeMap['key']去取值,一直报错找不到。切记在webwork自带的freemarker中对Map中Key的定义为String类型(如果你想用${Map[key]}这样取值的话;如果用${Map.get(key}这样取值就可以用其他类型,如Map<Long,Object>)。否则会一直找不到对应值,一直报错。
坑四:map取值之前需要先判空
map取值之前需要先判空,否则map中没有对应的值会报错。判断对象是否存在(null)经常会用到,如果对象 != null 则xxxx,在freemarker中表达比较奇怪,例如判断 target 是否为null,如果不为 nll 则做xxx动作<#if typeMap['2']??> xxxx</#if>
比较复杂的示例
shareNameresultMap
typeMap
idMap
都是<String,String>的map。
现在我把它们循环输出11个。
<#list 1..11 as t>
<#if shareName[t?string]??&&resultMap[shareName[t?string]]??&&typeMap[shareName[t?string]]??&&idMap[shareName[t?string]]??>
<li class="<#if t !=11>bdb1px</#if>" data="${requestHost}/report/${typeMap[shareName[t?string]]}/${idMap[shareName[t?string]]}">
<span class="cloud-result-tdleft">${shareName[t?string]}</span>
<span class="cloud-result-tdright">${resultMap[shareName[t?string]]}</span>
</li>
</#if>
</#list>
相关文章推荐
- java积累(二)----freemarker把jsp页面转换成html需要注意的地方---freemarker的坑
- html页面触发js里面的方法时,传递的参数写法需要注意的地方。
- ACCESS与SQL转换需要注意哪几个地方
- 在java中使用常量变量的一些需要注意的地方
- HTML页面设计需要注意的细节问题
- 26个提升java性能需要注意的地方
- forward redirct 转向和重定向区别;通过el和java代码在jsp页面取出参数,jsp:param注意事项
- ACM中用Java水高精度需要注意的2个地方
- xhtml需要注意的地方,与html不同之处
- JAVA中关于异常需要注意的地方
- Java引用传递需要注意的地方
- 关于Ibatis从页面传入数据持久层需要注意的地方
- java需要注意的地方2
- 使用Java中的final变量需要注意的地方。
- java中需要注意的地方,包含方法传递参数等
- JSP运行在tomcat下时,页面java代码的变量命名的一个注意事项
- linux操作系统下发布java项目需要注意的地方
- Java多线程的线程同步需要注意的地方
- Java 中没有无符号数,在读字节数组转换的时候需要注意溢出的情况
- Java中的一些需要注意的地方