Spring MVC和FreeMarker framewroks的新手。按照this教程开始使用它。
当我尝试添加更多模型对象并在freemarker模板中访问它时。但它没有用。我完全不知道将模型对象访问到freemarker模板中
的控制器
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(@ModelAttribute("model") ModelMap model) {
String amount = "Amount";
Document xml = readProductXML();
model.addAttribute("users", userList);
model.addAttribute("sectionName",amount);
return "index";
}
Freemarker的
<#import "spring.ftl" as spring />
<fieldset>
<legend>${sectionName}</legend>
</fieldset>
</#list>
错误
The following has evaluated to null or missing:
==> sectionName [in template "index.ftl" at line 28, column 67]
XML
<FreeMarkerUI>
<section name="amount" label="Amount">
<field name="firstName" label="First Name" type="text" mandatory="yes"/>
<field name="lastName" label="Last Name" type="text" mandatory="yes"/>
<field name="country" label="Country" type="dropdown" codeTableName="country" mandatory="no"/>
</section>
</FreeMarkerUI>
答案 0 :(得分:2)
您需要绑定@ModelAttribute的名称才能在Freemarker表达式中使用它。将您的freemarker模板更改为:
<#import "spring.ftl" as spring />
<@spring.bind "model" />
<fieldset>
<legend>${model.sectionName}</legend>
</fieldset>
答案 1 :(得分:2)
你也可以做这样的事情:Himanshu:
public class User {
private List<String> users;
private String user;
//getters and setters
}
public ModelAndView home (){
ModelAndView mav = new ModelAndView("/someurl");
User userToReturn = new User();
userToReturn.setUser("Big Joe");
//get userList from somewhere
userToReturn.setUsers(userList);
mav.addObject("user", userToReturn);
return mav;
}
然后在Freemarker中,只需执行
即可访问用户对象<fieldset>
<legend>${user.user}</legend>
</fieldset>
或者
<fieldset>
<#list user.users as displayUser>
<legend>${displayUser}</legend>
</#list>
</fieldset>
您在第二次发布后更改了一些变量名称,所以我只是将两个帖子合并来给出答案。
这是一个非常简单的例子,但是如果您的控制器和模型属性有很多不同的参数出来,将它们全部保存在一个Object中而不是必须定义每个模型会变得更有用MAV要处理的对象。
同样的对象也可以与@ModelAttribue
注释一起使用
public ModelAndView home (@ModelAttribute User user) {
ModelAndView mav = new ModelAndView("/someurl");
//do cool and exciting stuff with the user object
mav.addObject("user", user);
return mav;
}
如果您想要从同一页面反复传递信息到控制器方法,这可能会有所帮助。
答案 2 :(得分:0)
我通过将控制器方法更改为
来实现它public ModelAndView home() {
ModelAndView mav = new ModelAndView();
mav.addObject("users", userList);
mav.addObject("user", "Big Joe");
return mav;
}