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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q383965374/article/details/53202791


有时候为了方便页面分享,我们需要把页面保存成静态资源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>




展开阅读全文

没有更多推荐了,返回首页