我用freeMarker生产静态html,用了ftl模板来实现,hello.ftl里面就写了$(user),java代码里面下了下面的
Map<String,Object> data = new HashMap<String,Object>() ;
data.put("user", "abc") ;可以做成功。
我把"abc"换成一个对象,例如user对象,有name、password等属性。heool.ftl里面就写了${user.name} ${user.password},java代码写了data.put("user",oneUser) ;
结果出不来。是不是在freeMarker的Map中不能传自定义对象啊,有高手帮小弟解决下。

解决方案 »

  1.   

    name、password等属性 是不是没有赋值喔
      

  2.   

    只要你定义了bean wrapper就应该可以访问一般bean的属性的,你确认你的bean是标准的java bean吗?
      

  3.   

    应该不会出现什么问题的呀?
    是完全可以的.${user.name}或者${user["name"]}
      

  4.   

    我的bean就实现了Serializable接口,也赋值了。
      

  5.   

    bean wrapper ??我就是这样写的freeerCfg.setObjectWrapper(new DefaultObjectWrapper()) ;应该是吧
      

  6.   

    template.ftl
     <#if links?size != 0>  
       <div>  
           <strong>友情链接:</strong>  
              <#list links as link>  
               <a href="${link.hrefAddress}" target="_blank" title="${link.bannerName}">${link.bannerName}</a>  
               </#list>  
        </div>  
       <#else>   
    </#if>  
      

  7.   

    action 代码
    public void staticHTML() throws Exception {
    BannerBusiness bb = new BannerBusiness() ;
    List list = bb.selectAllBannerBusiness() ;
    for(int i=0 ;i<list.size();i++){
    System.out.println(list.get(i));
    }
    // Banner oneBanner = new Banner();
    // oneBanner.setHrefAddress("http://www.baidu.com") ;
    // oneBanner.setBannerName("fdsafsd") ;
    //
    Map<String,Object> data = new HashMap<String,Object>() ;

    data.put("links", list) ;

    // data.put("user", "taoyu") ;
    fm.createHTML(ServletActionContext.getServletContext(), data, "template.ftl", "aa.html") ;
    }
      

  8.   

    是不是不能接收List<Object>这样的值?
      

  9.   

    没看见模板用user
    外加List <T> 原型擦除T,变成限制类型,没有指定就默认是Object类型,没有必要刻意指定。