Freemarker :包含其他对象的对象列表

Freemarker : list of objects which contains other object

我想用 FreeMarker 语言打印包含其他对象的对象列表

例如我有一个 Java 对象:

public class Adress
{
   private String _street;
   private String _city;
}

和另一个 Java 对象:

public class House
{
     private int _nb_room;
     private Adress _adressHouse;
}

在我用我的 bdd 数据创建一个列表后:

public Collection<House> getHousesList()
{
   Collection<House> housesList = new ArrayList<House>();
   DAOUtil daoUtil = new DAOUtil( "SELECT nb_room, street, city FROM house", bdd);
   while(daoUtil.next())
   {
      House tmpHouse = new House();
      tmpHouse.setNbRoom(daoUtil.getString(1));

      Adress tmpAdress = new Adress();
      tmpAdress.setStreet(daoUtil.getString(2));
      tmpAdress.setStreet(daoUtil.getString(3));

      tmpHouse.setAdress(tmpAdress);
      housesList.add(tmpAdress);
   }
   daoUtil.free();
}

在另一个文件中,我将列表发送到 html :

model.put('houseList',model.put('housesList',getHousesList());

在我的 html 中我有 :

<table>
   <#list houseList houseTmp>
      <tr>
         <td>${houseTmp.nb_room!''}</td>
         <td>${houseTmp.adressHouse.street!''}</td>
         <td>${houseTmp.adressHouse.city!''}</td>
      </tr>
   </#list>
</table>

当我在我的浏览器上查看我的 HTML 时,只有打印的房间数量而不是地址但是当我在将列表发送到 HTML 之前做一个断点时里面是地址。

那我怎样才能得到房子的地址呢?

您的 House class 中有一个 private Adress _adressHouse;

Freemarker 不会查看那个,但会查看您可能有的 public getter。

如果您有 getAdressHouse(),请使用 ${houseTmp.adressHouse.street!''}。如果您有 getAdress(),请使用 ${houseTmp.adress.street!''}

我猜这是第二种情况,正如你所声明的那样tmpHouse.setAdress(tmpAdress);