无法访问FTL文件中从modelmap发送的对象列表

时间:2014-06-14 10:58:21

标签: java javascript html spring freemarker

我是ftl的新手(FreeMarker模板)。我使用像这样的模型映射从我的控制器发送一个对象列表

我的控制器代码

@RequestMapping(value="/xxx")
public String myMethod(ModelMap model){
  List<MyDTO> dto = mymethods(); // I return some list objects in this method
  model.addAttribute("dto",dto);
  model.addAttribute("dtoLength",dto.size());
  return "myview"; 
}

MyDTO.java

public class myDTO{
  Public String var1;
  Public String var2;

  public String getVar1() {
return var1;
  }
  public void setVar1(String var1) {
this.var1 = var1;
   }      
  public String getVar2() {
return var2;
  }
  public void setVar2(String var2) {
this.var2 = var2;
   } 
}

现在我尝试从我的ftl的javascript访问dto。我尝试了很多这样的方式:

 var dto=${dto};

它说必须在$ {....}内的任何内容应该是字符串,整数,布尔..blah blah

所以我想像这样迭代它来得到我想要的东西

var valueIWanted;
if(${dtoLength}>0){
  for(var i=0 ; i < ${dtoLength} ; i++){
     ticketList[i] = ${ticket[i].var2};
  }
}

但是我也无法以这种方式访问​​它。我应该在这里做什么?我想我错过了语法。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以轻松访问modelMap数据:

    <#list dto as dtoList>
    <tr>
        <td>${dtoList.var1}</td> <td>${dtoList.var1}</td>
    </tr>
    </#list>

您不需要发送DTO的长度,如果您将其用于其他目的,则可以使用它。

你可以简单地迭代列表,你不需要for循环。

this.

如果您想使用JavaScript访问数据,那么您可以在控制器的页面加载上使用ajax请求,它会向您发送包含数据的响应,然后处理该数据并在FTL页面上打印。如果可能,那么使用一些JavaScript框架,以便处理这样的请求变得简单方便。

你仍然可以这样做:var dtoList= "${dto}";。不是没有引用。

请参阅SO Answer.

要检查是否为空:

[#if dto??]
   //inside it write all your code
[/#if]

您可以查看here.

example.

答案 1 :(得分:0)

您可能想尝试

var dto =“$ {dto}”;

而不是

var dto = $ {dto};