您的位置:首页 > 编程语言 > Java开发

java积累(二)----freemarker把jsp页面转换成html需要注意的地方---freemarker的坑

2016-11-18 14:24 447 查看
有时候为了方便页面分享,我们需要把页面保存成静态资源html来保存,我们可以通过freemarker实现。

具体实现方法这里就不详细说了,主要还是在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>

比较复杂的示例

shareName

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: