[英]How to access Spring MVC model objects in Freemarker template?
Spring MVC和FreeMarker framewroks的新功能。 按照本教程開始使用它。
當我嘗試添加更多模型對象並在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>
您需要綁定@ModelAttribute的名稱才能在Freemarker表達式中使用它。 將您的freemarker模板更改為:
<#import "spring.ftl" as spring />
<@spring.bind "model" />
<fieldset>
<legend>${model.sectionName}</legend>
</fieldset>
你也可以這樣做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
注釋一起@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;
}
如果您想要從同一頁面反復傳遞信息到控制器方法,這可能會有所幫助。
通過將控制器方法更改為,我已將其工作
public ModelAndView home() {
ModelAndView mav = new ModelAndView();
mav.addObject("users", userList);
mav.addObject("user", "Big Joe");
return mav;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.