我是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";
}
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};
}
}
但是我也无法以这种方式访问它。我应该在这里做什么?我想我错过了语法。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
您可以轻松访问modelMap数据:
<#list dto as dtoList>
<tr>
<td>${dtoList.var1}</td> <td>${dtoList.var1}</td>
</tr>
</#list>
您不需要发送DTO
的长度,如果您将其用于其他目的,则可以使用它。
你可以简单地迭代列表,你不需要for
循环。
如果您想使用JavaScript访问数据,那么您可以在控制器的页面加载上使用ajax请求,它会向您发送包含数据的响应,然后处理该数据并在FTL页面上打印。如果可能,那么使用一些JavaScript框架,以便处理这样的请求变得简单方便。
你仍然可以这样做:var dtoList= "${dto}";
。不是没有引用。
请参阅SO Answer.
要检查是否为空:
[#if dto??]
//inside it write all your code
[/#if]
您可以查看here.
答案 1 :(得分:0)
您可能想尝试
var dto =“$ {dto}”;
而不是
var dto = $ {dto};