【问题标题】:cannot access list of object sent from modelmap in FTL file无法访问从 FTL 文件中的模型映射发送的对象列表
【发布时间】:2014-06-14 10:58:20
【问题描述】:

我是 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};
  }
}

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

【问题讨论】:

  • 你在哪里定义了ticketLength

标签: java javascript html spring freemarker


【解决方案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.

【讨论】:

  • 当我这样做时,它会抛出类似错误:Servlet.service() for servlet [appServlet] in context with path [/myapp] throw exception [Request processing failed;嵌套异常是 freemarker.core.InvalidReferenceException:以下已评估为 null 或缺失:==> 模型 [在第 19 行第 16 列的模板“myFile.ftl”中]
  • 嘿朋友!我得到它 nw .. 虽然我只使用了 dto 而不是 model["dto"].Thanx 很多! :)
  • 当然。但我的下一个问题是如何检查列表是否为空??
  • @user2078883 - 我已经更新了答案以检查是否为空。
  • 谢谢兄弟。在ma项目中帮了很多忙
【解决方案2】:

你可以试试

var dto="${dto}";

而不是

var dto=${dto};

【讨论】:

  • 不..它也没有工作。和前面说的一样抛出了同样的错误
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多